训练网络考虑内容
样本均衡
图像应该进行归一化
小网络,没有resnet的要加上BN, 训练的时候均值和归一化是计算的来的,测试的时候要是根据训练集的均值和归一化来的,如果测试的时候is_training要设置为false
CNN要加上偏置,否则,所有输出结果都是一样的,自己出现的这种现象
网络初始化问题
网络1层一个cnn一个pool,两层2个cnn一个pool
分类损失用focal loss
正则化
学习率设置(0.003往下衰减,自己在实验中0.001开始速度变快,或者用余弦退火学习率)
要在bn relu后加上全连接层要加上dropout, 在测试的时候要记得将其转换为1,问题:否则输入相同的图片产生的结果不一样,一个batch64张相同的图片结果也不一样
输入图片以及每个block块都加上dropout, 这个keep rate 从0.9-0.5依次降低
无论什么图片输入输出结果一样?
可能一:模型最终输出都是0,梯度消失, 用HE初始化, 添加dropout,
使用leaky-relu
原来是最后的分类经过了softmax 激活,但是在计算损失的时候还是使用了softmax,这样就相当于经过了两次softmax,梯度消失更加明显了
100个数据组成的训练集。训练的时候,acc是1,损失也比较小,但是继续用这100个训练集进行训练,精度和猜的一样
数据输入的时候,(img-255)/128 这里不对,改为(img-127.5)/128
batchsize是128,由于经过batch normalization,所以网络输入始终是一个数据集
aimg = img[0]
aimg = cv2.cvtColor(aimg, cv2.COLOR_BGR2RGB)
cv2.imshow('img', aimg)
这个图片数值范围是0-1
imageData = tf.image.convert_image_dtype(imageData, tf.float32) 这个范围也是0-1所以不应该用-127.5/128
最后一层是全部的进行fc,这个和人家的不一样可以改过来试一下,他用的是train和extradata,自己要用一下
整理一下脚本文件