1、学习率问题
学习率要尽量小一点,一般是四位小数,并且在训练过程中不能不变要给个衰减因子使学习率下降。
if (epoch+1) > (self.num_epochs - self.num_epochs_decay):
lr -= (self.lr / float(self.num_epochs_decay))
for param_group in self.optimizer.param_groups:
param_group['lr'] = lr
2、网络结构问题
网络的层数可以很深,但是最后输出特征的尺寸不能太大,否则会显存不足。
3、标准差问题:
在设计卷积层的时候std要写成例如:
self.conv2_w = tf.Variable(tf.truncated_normal(shape=[3, 3,64,128], dtype=tf.float32, stddev=tf.sqrt(2 / (3*3*64))))
4、对输入数据进行归一化,例如:
self.x = (self.x/255-0.5)*2
5、如果需要网络具有很强的非线性能力就在每一层多加些神经元,这样可以提取更多的特征,而更深的网络可以学到更深层的东西。