CIFAR-10数据集比MNIST训练难度高许多

CIFAR-10数据集比MNIST训练难度高许多

MNIST数据集几乎很好训练,随便设计一个两层的全连接网络都能达到将近90%的测试精度,加入卷积层后更是可以轻易达到>97%的精度,但是同样的模型用来训练CIFAR-10,训练相同的epoch之后得到的结果却只有10%,只有训练几十个epoch之后测试精度才能达到80%,其间的上升速度简直慢如蜗牛

cifar10数据像素值的取值范围在[0,255],此时取learning_rate = 1e-3,loss可以比较有效地下降(输入之前减去训练集的图像均值);但是对中心化的图像的像素值压缩到[0,1]时,要取learning_rate = 1e-1才行。
原因:以最简单的单全连接层为例, y=Wx+b y = W x + b ,假设 W,b W , b 已经训练到了最佳参数,当 x x 发生伸缩时,假设相应的scale参数是 k k ,那么此时的最优模型为 ky=W(kx)+kb k y = W ( k x ) + k b ,相应的最佳参数为 W,kb W , k b ,也即 W W 没变,但是 b b 则伸缩了相应的 k k 倍。原来的导数 dydW=x,dydb=1 d y d W = x , d y d b = 1 。对 x x 进行伸缩后 dy¯dW=x¯=kx,dy¯db¯=1 d y ¯ d W = x ¯ = k x , d y ¯ d b ¯ = 1 ,此时若取原来的步长,则 ΔW=kx Δ W = k x ,必然导致loss下降速度与原来不同。原来如此!

tensorflow中不能重复使用变量名?实验时发现

x = tf.placeholder(...)
x = tf.multiply(x,...)

y = ...(x)

x = tf.placeholder(...)
x1 = tf.multiply(x,...)

y = ...(x1)

的结果好像不同

你可能感兴趣的:(deep,learning)