title
- ALPN 复现流程
- GAN与WGAN
- 二阶优化
1 这篇文章是一篇用于高频遥感图分类的应用型文章,公开数据集程序开源,难度友好,代码清晰程度较好。用'IP'数据集说明,其他类似
class AEDataset (Datapath, transform)
def getitem()
def len()
--->输出用于生成学习无标签的数据
pytorch中Dataset类是将原始数据封装成统一的数据接口,通过索引的方式访问数据。
class MYDataset(labelpath,transform)
def init(Datapath,Labelpath)
def getitem()
def len()
---> 输出用于监督学习的数据与标签
def generate_(batch_size,dim)
---->生成dim维度,batch_size数量的样本
--筛选样本--选了16*2=32个
循环随机选出固定个数样本到RequestX.npy RequestY.npy
Enc_AAE 编码器--使用上述32个
(channel,output_dim,windowSize,output_units)--->(feature,out)
SaveFeatures_AAE 保存无监督编码器提取的特征 所有样本
调用Enc_AAE.eval
(modelpath,XPath,Patch_channel=,windowSiz,encoded_dim,batch_size=, output_units)--->Patch_Features
---筛选样本--
SelectSamples 筛选样本
semi_kMeans 半监督选出离中心最近的
newCent 使用32个样本筛选出初始16个中心-->centroids
--- 循环将每个样本分配到聚类中心,计算每个类的中心,记录离聚类中心最近的样本加入RequestArray 现在是32+16=48
TrainWholeNet
调用Enc.train 48个训练一下model2 输出Train Loss
再调用SaveFeatures_AAE保存model2的eval提取的10249个特征
Test
使用1029-48剩下的测试
将分类结果写入CSv
总结 通过48个样本有监督+10249个样本无监督 完成。48个样本是首先随机选32 再Kmeans迭代选16。这篇只是很简单是AC思想 PN思想 不是传统的N-way K-shot 小样本
实验部分:控制变量取在 网络不同backbone 带不带主动学习筛选样本 单网络加上PCA
每类打标签样本变化表现
虽然不是每类都最优 但是总的OA AA 和Kappa是最优的
2 知识点
分类性能可以调官方APIclassification_report直接报告很多性能
3D卷积处理图像 WHD*C 捕捉数据在时间和空间维度的特征 视频图像 具有深度信息的图像数据 3D卷积更合适 so用于MFL反演上看看?
3 代码复现遇到的问题
train = 0,1 开关打开
.detech()函数 梯度脱离
*GAN
从数学散度角度看待GAN
然后会有collapse现象发生
如果一个判别器是完美的,那么我们将有
D(x)=1,x\in x_r
D(x)=0,x\in x_g
首先,将一个DCGAN分别训练1,10,25个epochs.然后,将训练好的生成器固定,从头开始训练一个判别器,记录损失函数的梯度变化情况.我们可以看到梯度的范数衰减非常快.在最好的情况下,经过4000次迭代,范数衰减了5个数量级.因此损失函数会降至0,进而导致我们将没有梯度用于更新损失. 图展示了当判别器表现愈发出色时,梯度消失愈快.
在训练过程中,生成器可能会崩溃,持续生成相同的输出.这是在训练GAN过程中经常出现的失败情况,一般被称作模式崩溃(Mode collapse).尽管生成器仍然可能能够欺骗相应的判别器,它已经失去了学习复杂的现实世界数据分布的能力.生成对抗网络并没有天生自带能够指示训练进程的目标函数.如果没有一个好的评估指标,无异于盲人摸象:既没有人告诉我们训练什么时候停止,也无法比较不同模型之间的好坏.
对collapse有两种探索
第一种探索 见图片
第二种探索加噪声 见图片
第三种Wasserterin Gan
与原本的GAN算法对比,WGAN有以下变化:
-
在每次目标函数进行梯度更新后,限制参数在一个小区间中变化,操作上是绝对值截断到不超过一个固定常数c。
-
使用了一个从Wasserstein距离中推导而来的新的损失函数,同时判别器模型也不再直接进行判别,而是用于帮助估计真实和生成数据分布之间的距离,操作上是将判别器最后一层去掉sigmoid。**这个pN中是不是可以模仿 实际上是回归拟合
-
采用RMSProp优化器,而非一些基于动量的优化器如Adam等对损失函数进行优化,因为这样会导致在模型训练过程中的不稳定
令人遗憾的是,WGAN仍然不是完美的.就连WGAN的作者也在论文中提到,通过Weight clipping强行保持Lipschitz连续性显然是一个糟糕的方法.WGAN仍然面临训练不稳定,在Weight clipping后收敛速度太慢(如果cliping window太大),梯度消失(如果cliping window太小)等问题.
引用 https://zhuanlan.zhihu.com/p/25071913
https://zhuanlan.zhihu.com/p/692221825
https://zhuanlan.zhihu.com/p/34287744
*Bilevel Optimization 二阶层优化
GAN 和 Meta 都可以用BOL链接起来
https://zhuanlan.zhihu.com/p/619072227
https://www.cnblogs.com/kailugaji/p/15433024.html