上周对CNN-RWI论文进行了初步研读,但是只是了解了大概,很多问题也只是停留在表面,没有进行深入思考。
本周带着一系列问题继续研读CNN-RWI论文,并对代码进行初步学习。
问题描述:
Git全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆 (git clone),在本地机器上拷贝一个完整的Git仓库。工作原理及流程如下:
其中:
在Git官网下载对应系统的软件,下载地址为: git-scm.com或者gitforwindows.org,或者阿里镜像。
git-scm 是 Git 的官方,里面有不同系统不同平台的安装包和源代码;
gitforwindows.org 里只有 windows 系统的安装包。
阿里镜像Ctrl+F 搜索最新版本前缀即可,如2.40.0。
(1)确保计算机已经成功安装Git;
(2)安装完成后,打开Pycharm,进入菜单栏中的“Setting”;
(3)在“Setting”窗口中,找到“Version Control”选项,并点击进入;
(4)在“Version Control”选项中,找到“Git”点击进入;
(5)在“Git”选项中,找到“Path to Git executable”的字段,找到安装的Git的可执行文件的路径;
(6)选择正确的路径后,点击“OK”或者“apply”来保存设置;
(7)在Pycharm中设置Terminal: File—>Settings—>Tools—>Terminal—>Shell path
(8)将cmd.exe改成刚刚下载的git的路径,注意选择的是sh.exe,不是git.exe
在Terminal中运行:首先进入sh文件所在的目录,进入后即可开始运行
学习链接:PySIT Documentation — PySIT v1.0
PySIT是Python的地震反演算法和波求解器的集合。这个软件包被设计为开发地震数据反演高级技术的测试台环境。
安装PySIT的依赖项:
PyAMG的安装可以通过pip、conda或源代码安装。
# pip安装
pip install pyamg
# conda安装
conda config --add channels conda-forge
conda install pyamg
安装完成后,可以在Python代码中导入PyAMG并使用它来解决线性系统。下面代码演示了如何使用PyAMG来求解一个简单的线性系统(如何区分线性系统与非线性系统 - 知乎 (zhihu.com)):
import numpy as np
import pyamg
# 创建一个稀疏矩阵
A = pyamg.gallery.poisson((100, 100))
# 创建一个随机向量
b = np.random.rand(A.shape[0])
# 使用PyAMG的AMG方法求解线性系统
x = pyamg.solve(A, b, verb=True)
print("Solution:", x)
上述代码中,首先创建了一个100x100的稀疏矩阵A和一个随机向量b。然后,我们使用PyAMG的solve函数来求解线性系统Ax=b,并将结果存储在变量x中。最后,打印出求解结果。
对于可选的并行支持,PySIT可以依赖于:
- MPI4Py 1.3.1(或更高版本)
安装方式:
(1)pip安装:
pip install pysit --pre
# 升级操作
pip install pysit --upgrade
(2)git安装:
# 1.从github上托管的主存储库克隆PySIT
git clone https://github.com/pysit/pysit.git
# 2.进入PySIT克隆目录的根目录下,运行:
python setup.py install
在PySIT的文档介绍中,有对Marmousi2数据的可视化展示教程,但是对计算机环境要求较高。
shell脚本是shell命令组成的可执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,速度相对来说比较慢。
学习参考:一篇教会你写90%的shell脚本 - 知乎 (zhihu.com)
“ # ”开头的表示注释,被编译器忽略
运行shell时,存在三种变量:
变量操作:
引用变量:
matlab_dir='matlab1.0/'
vel_dir='Marmousi/'
cd $matlab_dir$vel_dir
sh_num_smooth_iteration=400
"sh_num_smooth_iteration=$sh_num_smooth_iteration"
# sh_num_smooth_iteration=400
iteration=0
matlab_filename=${iteration}"th_mig_"
# matlab_filename=0th_mig_
下图是CNN-RWI代码的学习指南。
在代码中涉及很多之前没有接触到的知识,比如波形求解器、RTM偏移图像、shell脚本、TensorFlow等
代码中采用argparse模块完成命令行选项与参数的设置 。
TensorFlow是一个开源的机器学习框架,主要用于构建和训练深度学习模型,其主要作用包括:
tf.placeholder()
是 TensorFlow 1.x 版本中的一个函数,用于在计算图中创建一个占位符节点。占位符是在图执行期间预期会传递某种输入张量的特殊节点。这个函数常常早TensorFlow 代码的开始部分被用来设定占位符,然后这些占位符会被具体的值替换。
import tensorflow as tf
# 创建一个占位符,用于接收输入数据
input_data = tf.placeholder(tf.float32, shape=[None, input_size])
在上面这个例子中,tf.placeholder()
创建了一个名为 input_data
的占位符节点,该节点预期在计算图执行期间接收一个形状为 [batch_size, input_size]
的二维张量。tf.float32
指定了该张量中的数据类型应为浮点数。
需要注意的是,TensorFlow 2.x 已经弃用了静态计算图和 tf.placeholder()
,取而代之的是更加灵活的 Eager Execution 模式和动态计算图。在 TensorFlow 2.x 中,推荐使用 tf.Tensor
和 tf.function
来定义和训练模型。
tf.train.Saver()
是 TensorFlow 中用于保存和恢复模型的工具,这个类用于在训练过程中定期保存和加载训练过程中的模型权重和配置,以便在训练中断或其他情况下能够恢复训练,如硬件故障或长时间运行的任务被中断。以下是 tf.train.Saver()
的一些关键参数和功能:
max_to_keep
的限制。build()
方法之前不会进行任何操作。这对于在使用 tf.train.MonitoredTrainingSession
时的早期检查点操作很有用。import tensorflow as tf
# 定义模型和优化器
model = ...
optimizer = ...
# 创建 Saver 对象
saver = tf.train.Saver()
# 在训练循环中定期保存模型
with tf.Session() as sess:
for epoch in range(num_epochs):
# 训练模型...
sess.run(optimizer, feed_dict={...})
# 每隔一定数量的 epochs 保存模型
if epoch % save_interval == 0:
saver.save(sess, "model-checkpoint", global_step=epoch)
在上面的示例中,首先定义了模型和优化器,然后创建了一个 tf.train.Saver()
对象。在训练循环中,定期调用 saver.save()
方法来保存模型的权重。这样,即使在训练过程中发生中断,也可以使用 tf.train.Saver().restore()
方法来恢复训练。
在本周对毕业设计论文题目进行了思考,根据近段时间的学习情况,考虑以下选题:
之前对CNN与Unet的的区别不太了解。比如CNN-RWI这篇文章,为什么取名为《自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法(CNN-RWI)》,但是网络架构使用Unet呢?
对于闵老师博客中提到的第五部分的数据训练方式,比如迁移学习、多任务学习等,不太了解,所以没有进行选择。
文章中提及对于阈值的设置主要考虑了两个因素:
2. 根据特征分类,究竟是依据什么特征分类,分类后表明不同速度类型,还是其他方面?
在基于K-means方法中,基于速度分布对模型进行划分。
3. 地震观测记录、初始速度模型、RTM图像之间的关系?
地震观测记录是对一次地震的从起始至终结全过程中的观测记载,包括震幅、频率、波形、时间等。这些数据通常以图表的形式进行汇总收集,并用于分析地震的基本参数,如发震时刻、震中经纬度、震源深度及震级等。通过地震观测记录,可以了解地震发生的过程和规律,为地震研究和预防提供基础资料。
初始速度模型是指在地震勘探中,为了反演得到更准确的地质构造和地球物理参数,首先建立一个简单的地震波传播速度模型。这个模型是基于对区域地质的了解和一些假设,用于指导后续的反演计算。在建立初始速度模型时,需要考虑多种因素,如地层分布、岩石类型、构造特征等。这个模型可以是一个简单的层状模型,也可以是一个更复杂的模型,具体取决于研究区域的特点和需求。在反演过程中,初始速度模型会不断被修正和优化,以逐渐逼近真实的地质情况。这个过程通常需要多次迭代和调整,因此初始速度模型也被称为迭代初值模型。初始速度模型是地震勘探中不可或缺的一部分,它为后续的反演计算提供了初始条件和指导,是提高反演精度和准确性的重要保障。
叠前逆时偏移(RTM)方法是目前地震勘探领域最为精确的一种地震数据成像方法,主要运用声波方程进行波场延拓,可以实现对复杂构造介质的准确成像,为地球物理学家提供了创建地下3D图像的能力。
问题描述:'dict' object has no attribute 'iteritems'
可能的原因:python版本问题
解决方法:更换安装方式,先安装git得以解决。
在数学中,双竖线“||”通常表示范数(norm)的概念。范数是衡量向量大小的一个量度,它可以用来度量向量在某个空间中的“长度”或者“大小”。具体的范数定义取决于所使用的空间和定义方式。
例如,在欧几里得空间中,对于一个向量x = (x1, x2, ..., xn),其L2范数定义为:
||x|| = √(x1^2 + x2^2 + ... + xn^2)
这实际上就是向量x的长度。
在其他类型的空间中,如L1范数、无穷范数等,范数的定义会有所不同。所以,双竖线“||”的具体意义需要结合上下文和所使用的数学空间来理解。
对InversionNet网络结构的进行创新。