实验失败1
多个不同模型用相同数据集训练后,增加一个未标记数据集进行预测,找出未标记数据集中的两个模型预测结果相同的数据加入训练集,训练模型,重复此过程。
验证结果,不能提高测试集的准确率。
实验失败2
利用hinton的自动特征提取方法对cifar进行特征提取,模型训练效果较好。提取特征后尝试用k均值聚类后无监督的学习,用kmeans进行分类,分类的结果完全无意义。
实验失败3
假如深度学习模型的功能越多,其泛化能力越强,比如可以分类1000个类的网络,肯定比分类800个类的网络的泛化能力强;因此可以做一个实验,比如cifar10中,首先用一个网络分类10个类,得到验证集准确率是a,另一个网络分类5个类,得到验证集准确率是b,那么a肯定比b高。
实验结果相反。我认为是由于类别数量太少导致的,比如10个类随便猜准确率都是百分之10 ,但是5个类随便猜准确率就是百分之20。因此可能需要在imgnet这种有1000个类的上面进行验证。
实验失败4
sigmoid激活函数若其输入的值超出了[-5,5]之后,无论输入再怎么变化其输出都会变化很微小,因此层数多了以后sigmoid梯度消失的原因是不是就是这个原因?我当然知道梯度消失是因为其导数是个小数,不断相乘梯度就会越来越小,但是需要一个物理上的或者具体的解释。
因此我通过将输入除以60,这样就会将[-5,5]的区间扩大到[-300,300],如此做以后在每层300个核的情况下是否会加速收敛?
无效:因为除以60相当于梯度也除以60.。。
5
将输出核变为多种输出核或变为sigmoid(sigmoid())的形式,类似于增加每层的cardinity,失败,无效,结果相比普通的sigmoid略微降低。具体结构:
activation = keras.activations.sigmoid
kernal_num = 100
x1 = keras.layers.Dense(kernal_num, activation=activation)(input1)
x2 = keras.layers.Dense(kernal_num, activation=activation)(input1)
x2=keras.activations.sigmoid(x2)
x3 = keras.layers.Dense(kernal_num, activation=activation)(input1)
x3=keras.activations.sigmoid(x3)
x3=keras.activations.sigmoid(x3)
x4=keras.layers.concatenate([x1,x2,x3])