2023年11月11日~11月17日周报(基于matlab生成模拟数据、批量修改文件名、重写dataset)

本文讲述了作者在项目中遇到的问题,包括使用Matlab生成大量模拟数据以改进训练效果,以及批量修改文件名的过程。此外,还介绍了DataLoader和Dataset的使用,以及下周计划学习InversionNet网络结构并应用到OpenFWI数据上。
摘要由CSDN通过智能技术生成

目录

一、前言

二、基于matlab生成模拟数据

三、批量修改文件名

四、代码调试

五、重写dataset

5.1 DataLoader介绍

5.2 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

5.1 DataLoader介绍

        DataLoader是一个迭代器,用于构造可迭代的数据装载器,方便我们访问Dataset中的对象。Dataloader类不需要设计代码,只需要利用该类读取设计好的Dataset即可。下面为该类的参数介绍:

DataLoader(
  dataset, # Dataset类,决定数据从哪里读取以及如何读取
  batch_size=1, # 读取批次大小
  shuffle=False, # 每个epoch是否乱序(在训练的时候为true-对数据进行随机读取,提高模型泛化性,验证或者推理的时候常为False)
  sampler=None,
  batch_sampler=None,
  num_workers=0, # 是否多进程读取数据(在windows下设置为0,因为pytorch多进程是fork,windows不是这种方式,所以不能使用多进程;Linux常设置为4或8)
  collate_fn=None,
  pin_memory=False,
  drop_last=Fasle, # 当样本数不能被batchsize整除时,是否舍弃最后一批数据
  timeout=0,
  worker_init_fn=None,
  multiprocessing_context=None
)

5.2 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):# 在该方法中得到文件路径,将路径组成一个数组,则可以在getitim方法中直接读取
        pass
    # 按照索引读取每个元素的具体内容,对数据进行预处理
    def __getitem__(self, index):    # 按照索引读取每个元素的具体内容
        # 1、从文件中读取数据
        # 2、进行数据预处理(例如torchvision.Transform)
        # 3、 返回数据对(例如图像与标签)
        pass
    # 初始化一些需要传入的参数及数据集的调用,返回的是数据集的长度
    def __len__(self):
        pass

        其中,__getitem__接收一个index,接着返回图片数据和标签,index通常指的是一个list中的index,list中的每个元素包含了图片数据的路径和标签信息。

        list的制作:通常将图片的路径和标签信息存储在一个txt文件中,然后从该txt中读取。

        读取自己数据的基本流程:

  1. 制作存储了图片路径和标签信息的txt文件;
  2. 将txt文件中的信息转化为list,list中的每一个元素对应一个样本;
  3. 通过getitem函数,读取数据和标签,并返回需要的信息

        其中,返回的数据标签为tuple元组的形式,使用DataLoader,接着使用enumerate函数访问它们。 

六、下周计划

         学习InversionNet网络结构,使用OpenFWI中的数据跑通代码。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取ERA5数据,您可以使用ECMWF的API。具体步骤如下: 1. 首先,需要注册一个ECMWF账户并获取API密钥,具体步骤可以参考官方文档 https://confluence.ecmwf.int/display/WEBAPI/Access+ECMWF+Public+Datasets 2. 安装ecmwfapi库。可以使用pip命令进行安装: ``` pip install ecmwfapi ``` 3. 编写Python脚本。以下是一个示例脚本,可以获取202211122023228的ERA5数据,并下载到本地。 ```python from ecmwfapi import ECMWFDataServer server = ECMWFDataServer() # 定义要下载的变量和层次 era_variables = "2t,sp" era_levels = "2m,10m" # 定义下载参数 era_params = { "dataset": "era5", "date": "2022-11-12/to/2023-02-28", "expver": "1", "grid": "0.25/0.25", "levtype": "sfc", "param": era_variables, "step": "0", "stream": "oper", "time": "00:00:00/06:00:00/12:00:00/18:00:00", "type": "an", "class": "ea", "format": "netcdf", "target": "era_data.nc", } # 进行下载 server.retrieve(era_params) ``` 在上面的示例,我们定义了要下载的变量是2m和10m的温度(2t)和气压(sp),下载的层次是表面层(sfc),时间分辨率为每天四个时刻,下载的数据格式为NetCDF,下载的文件保存为era_data.nc。 您可以根据需要修改下载参数。具体可用参数可以参考ECMWF API文档 https://confluence.ecmwf.int/display/CKB/ERA5+data+documentation 注意:上述代码的"target"参数指定了下载数据保存的文件名和路径。请根据自己的需求修改此参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值