2023年11月11日~11月17日周报(基于matlab生成模拟数据、批量修改文件名、重写dataset)
目录
一、前言
二、基于matlab生成模拟数据
二、批量修改文件名
三、代码调试
四、重写dataset
一、前言
上周完成了FCNVMB的训练与测试,但是由于数据量较少,训练效果不明显。工作站运行forward.py代码生成模拟数据的时候出现错误,未解决。
本周计划使用matlab生成大量模拟数据,再进行训练查看训练效果,同时学习如何重写dataset。
二、基于matlab生成模拟数据
单个速度模拟文件计算多炮数据:
forward函数所需参数:①vfile:存放速度模型的文件目录;②outfile:存放正演地震数据的文件目录;③sn:炮数
[MATLAB] fullfile函数介绍:
函数功能:将多个字符串拼接为文件路径。
语法格式:f = fullfile(filepart1,filepart2,…,filepartN)
输出:将各个输入用"\"拼接起来;即:f = ‘filepart1\filepart2\…\filepartN’。
三、批量修改文件名
由于粗心,不小心将“georec”打成了“geroec”,因此使用matlab进行批量修改。错误情况:
代码如下:
% 可以直接将该脚本创建在待需要修改的文件夹下
path='******' % 输入带修改文件夹的地址
cd(path)
% 循环遍历所有文件
for i = 1:800
% 获取第i个文件名
oldname = ['geroec',num2str(i),'.mat']
% 打印原文件名,查看是否有错
disp(oldname)
% 将一个文件的完整路径中各部分提取出来
[filepath,name,ext] = fileparts(oldname)
% 进行重命名
newname = ['georec',name(7:end),'.mat']
% 打印新文件名,查看是否有错
disp(newname)
% MATLAB重命名文件函数
movefile(oldname,newname)
end
[MATLAB] fileparts函数介绍:
函数功能:将一个文件的完整路径中各部分提取出来。
语法格式:[pathstr, name, ext] = fileparts(filename)
其中,filename是需要解析的文件的完整路径。fileparts将这个文件名(包含完整路径信息)各部分分别提取到三个变量中。pathstr是这个文件的路径名,name是文件名,ext是包含一个点号文件的扩展名(指定文件的类型)。
四、代码调试
本次调试培训模拟数据的规模Trainsize=800,迭代轮数epoch=100,测试规模为Testsize=50。
Trainloss与Prediction如下图所示。
五、重写dataset
OpenFWI数据与代码:Open FWI | A collection of benchmark datasets for Seismic FWI with Machine Learning
在进行研究的时候,如果不想用pytorch自带的数据集,想加载自己的数据集,就需要通过重写一个继承了Datasets的MyDataSet类来放置自己的数据集。在之前经常调用torchvision库中的数据集对象直接获取常用的数据集,例如:torchvision.datasets.CIFAR10(),这样获得的一个DataSet对象属于 torch.utils.data.Dataset 类,将获得的Dataset对象后传入DataLoader就可以实现加载批量数据参与训练了。
MyDataSet中需要重写三个函数,如下:
from torch.utils.data import Dataset
class MyDataset(Dataset): #继承Datasets
# 初始化函数:加载数据-初始化文件路径与文件名列表等,完成初始化该类的一些基本参数
def __init(self):
pass
# 按照索引读取每个元素的具体内容,对数据进行预处理
def __getitem__(self, idx): # 按照索引读取每个元素的具体内容
pass
# 初始化一些需要传入的参数及数据集的调用,返回的是数据集的长度
def __len__(self):
pass