在CIFAR10数据集上无法获得高于50%〜的精度

时间:2017-05-24 13:07:20

标签: machine-learning tensorflow computer-vision deep-learning conv-neural-network

我目前正在尝试在TensorFlow中为Cifar10数据集开发CNN。

到目前为止,我发现CNN的最佳设置为:

Conv1,补丁3x3,32输出
最大池2x2
Conv2,补丁3x3,32输出
最大合并2x2
Conv3,补丁3x3,64输出
最大合并2x2
平到阵列
完全连接1024输出
SOFTMAX
这是代码版本:

W_conv1 = weight_variable([3, 3, 3, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

W_conv2 = weight_variable([3, 3, 32, 32])
b_conv2 = bias_variable([32])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

W_conv3 = weight_variable([3, 3, 32, 64])
b_conv3 = bias_variable([64])
h_conv3 = tf.nn.relu(conv2d(h_pool2, W_conv3) + b_conv3)
h_pool3 = max_pool_2x2(h_conv3)

h_flat1 = tf.reshape(h_pool3, [-1, 4 * 4 * 64])

W_fc1 = weight_variable([4 * 4 * 64, 1024])
b_fc1 = bias_variable([1024])
h_fc1 = tf.nn.relu(tf.matmul(h_flat1, W_fc1) + b_fc1)

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
h_fc2 = tf.matmul(h_fc1, W_fc2) + b_fc2

我使用RMSProp来最小化交叉熵,学习率为1e-4,批量大小为128,500个时期。我还通过减去平均值来对图像进行归一化,并在每个时期对数据进行洗牌

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
train_step = tf.train.RMSPropOptimizer(1e-4).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()


correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.global_variables_initializer())
i=0
j=0
offset=128
loop=int(50000/offset)
for k in range(500):
  i=0
  j=0
  datatotal,datalabel=unison_shuffled_copies(datatotal,datalabel)
  for j in range(loop):
    batch_xs = datatotal[i:i+offset]
    batch_ys = datalabel[i:i+offset]
    i=i+offset
    train_step.run(feed_dict={x: batch_xs, y_: batch_ys})
  print(k,"test accuracy %g"%accuracy.eval(feed_dict={x: testdata, y_: testlabels}))

我尝试了许多不同的优化器(adam,adadelta,SGD,RMS),并尝试添加或删除各种层,包括FC,dropout和convolutional。

我最好的结果之一就是之前的设置,在大约20世纪时,测试数据的准确度达到了42%。

我甚至尝试在本网站上实现完全相同的网络:http://nghiaho.com/?p=1913,但没有相同的结果。 还尝试从其他网站实施其他网络,但效果也很差。

如何改善我的成绩?

编辑:将最大合并更改为平均合并,在第25个时期获得55%的准确率。更好,但不太正确。

0 个答案:

没有答案