🌓

EMD

EMD距离

假设要把$Q$处的方块排列移动成$P$处模样。

定义:
$d_{i,j}$为将方块从$Q$处的第$i$堆移动到$P$处的第$j$堆途经的距离;
$f_{i,j}$为从$Q$处第$i$堆移动到$P$处第$j$堆的方块的数量。

作出如下约束条件:
$f_{i,j}>0$ 每次移动正数数量的方块;
$\sum_{j=1}^{N}f_{i,j}<=q_{i}$,$\sum_{j=1}^{N}f_{i,j}$为从$Q$中$i$处移动到$P$各处的方块量,显然不能超过$Q$中$i$处本来就有的量;
$\sum_{i=1}^{N}f_{i,j}<=p_{i}$,$\sum_{i=1}^{N}f_{i,j}$为从$Q$中各处移动到$P$种$j$处的方块量,显然不需要超过$P$中$j$处本来就有的量。(假设方块只从$Q$运到$P$处,不在$P$内部进行搬运)

阅读全文

探地雷达全波反演

A Machine Learning-Based Fast-Forward Solver for Ground Penetrating Radar With Application to Full-Waveform Inversion

IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING

使用神经网络建立正向模型,输入为:

  • Water fraction of the concrete ($WC$). 含水率
  • Radius of the rebar ($R$). 钢筋半径
  • Depth of the rebar ($D$). 埋深

输出为测点处探地雷达信号。通过优化算法匹配探地雷达信号和网络输出,得到输入,完成全波反演。

GPR Full-Waveform Inversion With Deep-Learning Forward Modeling: A Case Study From Non-Destructive Testing

IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING

上一篇针对A-scan,这里能够B-scan了。

同样使用神经网络模型,输入为:

  • the water fraction ($MC$) 含水率
  • the diameter ($R$) 钢筋直径
  • depth ($D$) 埋深
  • position ($X$) 位置

显然,输入比上面多了一个位置$X$,对于B-scan信号能够给出位置信息了。

同样的用优化算法匹配,获得输入的值,完成全波反演。

阅读全文

MATLAB 备忘录

最近只能记得七秒内的东西,七秒外的东西要在此记录一下!

大文件存储mat

当要存储的mat文件过大时:

1
save(path , ‘X_all’ ,’-v7.3’ )
python大文件mat读取

对于-v7.3存储的mat文件一般这么读

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import h5py
dict_data = h5py.File(X_all.mat) #dict_data文件里可能有多个cell,各对应着一个dataset

print(dict_data.keys()) # 可以用keys的方法查看cell的名字
# 输出:<KeysViewHDF5 ['X_all']>

print(dict_data.values()) #可以用values方法查看各个cell的信息
# 输出:ValuesViewHDF5(<HDF5 file "X_all.mat" (mode r+)>)

data = dict_data['X_all'] #选取一个cell
print(data.shape)#查看维度,是matlab写入数据的转置
# 输出:(522, 3145776)

## 需要转置回来
data_t = np.transpose(data) #data_t是numpy.ndarray
# 再将其存为npy格式文件
np.save('X_all.npy', data_t)
# 要用再这么读
matrix = np.load(X_all.npy')

阅读全文

ADA原理解读

Adaptive Discriminator Augmentation(ADA)

  • 避免手动调整增强强度, 根据过拟合程度动态控制它
  • 量化过拟合的标准方法:使用一个单独的验证集,并观察其相对于训练集的行为
  • 在N个连续的小批次上的平均值表示为$E[·]$

$$r_v = \frac{E[D_{train}]-E[D_{validation}]}{E[D_{train}]-E[D_{generated}]}$$

$$r_t = E[\mathsf{sign}(D_{train})]$$

对于$r_v$和$r_t$来说,值为0时是没有过拟合,值为1时是完全过拟合。

阅读全文

StyleGAN2-ADA源码解读(二)

费了半天劲儿终于找到了training_loop中调用augment_pipe的地方。

1
2
loss = dnnlib.util.construct_class_by_name(device=device, **ddp_modules, **loss_kwargs) # subclass of training.loss.Loss
....
1
2
3
4
5
6
7
8
9
10
11
class StyleGAN2Loss(Loss):
......
def run_D(self, img, c, sync):
if self.augment_pipe is not None:
img = self.augment_pipe(img)
with misc.ddp_sync(self.D, sync):
logits = self.D(img, c)
return logits
......
def accumulate_gradients(self, phase, real_img, real_c, gen_z, gen_c, sync, gain):
......

阅读全文

StyleGAN2-ADA源码解读(一)

在这里对StyleGAN 2 ADA的源码进行一个粗略的解读,主要目的是获得ADA的使用方法,顺便学习一下代码风格。

EasyDict

1
args = dnnlib.EasyDict()

其中,dnnlib为自定义包,EasyDict是其中定义的一个类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class EasyDict(dict):
"""Convenience class that behaves like a dict but allows access with the attribute syntax."""

def __getattr__(self, name: str) -> Any:
try:
return self[name]
except KeyError:
raise AttributeError(name)

def __setattr__(self, name: str, value: Any) -> None:
self[name] = value

def __delattr__(self, name: str) -> None:
del self[name]

这里__getattr__这里应该输入key返回值的函数,__getattr__是新增键值对的函数,__delattr__是删除键值对的函数。

阅读全文

读GAN-ADA问题记录

目录

*号的使用

对于*出现在函数参数中的情况可以表示为可变参数,一般写作*args ,用于将可变数量的参数传递给函数

1
2
3
4
5
6
7
8
9
10
11
def Fa(*args):
c=1
for n in args:
c=c*n
return c

print(Fa(2,3)) #输出6

print(Fa(2,3,4)) #输出24

print(Fa(2,3,4,5)) #输出120

对于单独出现在参数中的*参数,则表示,*后面的参数必须为关键字参数的形式

阅读全文

Matiplotlib热图colormap采用Parula的方法

Parula为MATLAB默认的热图colormap,想要在Matiplotlib中使用,需要这里的代码。

阅读全文

变分法基础

变分法预备定理的证明 欧拉方程的形式一与形式二的推导

阅读全文

地球物理勘探基础(二)

地震法

阅读全文