Tensorflow 就可以';不要让CIFAR-10卷积网络比偶然更好地工作

Tensorflow 就可以';不要让CIFAR-10卷积网络比偶然更好地工作,tensorflow,deep-learning,Tensorflow,Deep Learning,我一直在尝试建立一个简单的卷积网络来对CIFAR图像进行分类,无论出于什么原因,我都无法让它比偶然的表现更好。以下是相关的代码位(x是cifar图像数据,形状为(n,32,32,3)): 正如您将看到的,这是一个非常基本的设置-我知道这不是一个非常复杂的网络,但我只是想在转移到更复杂的体系结构之前先对其进行测试。然而,无论我尝试什么,我都无法获得超过“机会猜测”的预测准确度。当我对其进行训练时,损失稳步(或多或少)下降,但逐渐减少,并在随机猜测水平上饱和(即CIFAR-10的准确度为10%) 我

我一直在尝试建立一个简单的卷积网络来对CIFAR图像进行分类,无论出于什么原因,我都无法让它比偶然的表现更好。以下是相关的代码位(x是cifar图像数据,形状为(n,32,32,3)):

正如您将看到的,这是一个非常基本的设置-我知道这不是一个非常复杂的网络,但我只是想在转移到更复杂的体系结构之前先对其进行测试。然而,无论我尝试什么,我都无法获得超过“机会猜测”的预测准确度。当我对其进行训练时,损失稳步(或多或少)下降,但逐渐减少,并在随机猜测水平上饱和(即CIFAR-10的准确度为10%)

我尝试了各种不同的参数,例如不同的内核大小、步长、不同的最大池大小、有无规范化等等,但它似乎没有改变。我只是觉得我一定错过了一些关键的预处理步骤或其他什么,因为即使是一个相对简单/调优不好的网络,至少也应该能够比偶然更好地管理,当然。。。?请思考;-)


如何加载数据?如果你这样做了,你应该先考虑使用。当你使用tflearn时,你可以用纯tensorflow一步一步地替换tflearn函数。谢谢Martin的评论(很抱歉我刚才看到了它们!)。事实上,这听起来很奇怪,但它现在起作用了,我不太确定第一次出了什么问题!这似乎是不同事物的组合(我改为AdamOptimizer,使用了更大的批量,可能只是等待更长的时间等等;-))
# First conv layer with max pooling
# (x is in the input CIFAR data, (n,32,32,3)
normx=tf.nn.lrn(x)
w1=tf.Variable(tf.truncated_normal((5,5,3,depth1),stddev=0.05))
b1=tf.Variable(tf.zeros([depth1]))
act1_=tf.nn.relu(tf.nn.conv2d(normx,w1,[1,1,1,1],padding='VALID')+b1)
act1=tf.nn.max_pool(act1_,[1,3,3,1],[1,2,2,1],padding='VALID')

# Second conv layer with max pooling
w2=tf.Variable(tf.truncated_normal((5,5,depth1,depth2),stddev=0.05))
b2=tf.Variable(tf.zeros([depth2]))
act2_=tf.nn.relu(tf.nn.conv2d(act1,w2,[1,1,1,1],padding='VALID')+b2)
act2=tf.nn.max_pool(act2_,[1,3,3,1],[1,2,2,1],padding='VALID')

# fully connected
d=np.prod(act2.get_shape()[1:].as_list())
wfull=tf.Variable(tf.truncated_normal((d,nhidden),stddev=0.05))
bfull=tf.Variable(tf.zeros([nhidden]))
reshaped=tf.reshape(act2,(-1,d))
actfull=tf.nn.dropout(tf.nn.relu(tf.matmul(reshaped,wfull)+bfull),0.6)

# Output
wout=tf.Variable(tf.truncated_normal((nhidden,nclasses),stddev=0.05))
bout=tf.Variable(tf.zeros([nclasses]))
logits=tf.matmul(actfull,wout)+bout

loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=logits))
opt=tf.train.AdagradOptimizer(0.2).minimize(loss)