【发布时间】:2017-03-03 01:59:07
【问题描述】:
我试图解决 Kaggle 上的 Dogs vs. Cats Redux: Kernels Edition 问题。这是一个简单的图像分类问题。但是,我比得分为 17+ 的随机预测器做得更差。有谁知道为什么会这样?
神经网络模型
def convolutional_neural_network():
weights = {
# 3x3x3 conv => 1x1x8
'conv1': tf.Variable(tf.random_normal([3, 3, 3, 8])),
# 5x5x8 conv => 1x1x16
'conv2': tf.Variable(tf.random_normal([5, 5, 8, 16])),
# 3x3x16 conv => 1x1x32
'conv3': tf.Variable(tf.random_normal([3, 3, 16, 32])),
# 32 FC => output_features
'out': tf.Variable(tf.random_normal([(SIZE//16)*(SIZE//16)*32, output_features]))
}
biases = {
'conv1': tf.Variable(tf.random_normal([8])),
'conv2': tf.Variable(tf.random_normal([16])),
'conv3': tf.Variable(tf.random_normal([32])),
'out': tf.Variable(tf.random_normal([output_features]))
}
conv1 = tf.add(conv2d(input_placeholder, weights['conv1'], 1), biases['conv1'])
relu1 = relu(conv1)
pool1 = maxpool2d(relu1, 4)
conv2 = tf.add(conv2d(pool1, weights['conv2'], 1), biases['conv2'])
relu2 = relu(conv2)
pool2 = maxpool2d(relu2, 2)
conv3 = tf.add(conv2d(pool2, weights['conv3'], 1), biases['conv3'])
relu3 = relu(conv3)
pool3 = maxpool2d(relu3, 2)
pool3 = tf.reshape(pool3 , shape=[-1, (SIZE//16)*(SIZE//16)*32])
output = tf.add(tf.matmul(pool3, weights['out']), biases['out'])
return output
输出没有激活函数。
预测、优化器和损失函数
output_prediction = convolutional_neural_network()
loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(output_prediction, output_placeholder) )
trainer = tf.train.AdamOptimizer()
optimizer = trainer.minimize(loss)
test_prediction = tf.nn.softmax(output_prediction)
图像被转换为大小为 128x128x3 的 numpy 数组,并以批量大小为64.
编辑: 运行相同的代码 200 个 epoch。没提升。我做的稍微差一点。
【问题讨论】:
-
20 个 epochs 似乎还远远不够……你还需要一个相当大的训练集……训练可能需要很多小时……你可能想看看 googles inception已经训练好的模型(另见tensorflow.org/how_tos/image_retraining)
-
你用这个循环做什么? github.com/DollarAkshay/Python-Programs/blob/master/… 为什么不
np.argmax之类的? -
@Joran Beasley 是的 20 epochs 似乎少了,但它至少不应该做一个像样的预测吗?我的训练集有 25k 张图像。你建议多少个时代?我实际上想学习神经网络,这就是我不使用预训练模型的原因:)
-
@martianwars 这个循环是采用 2 个概率,猫的概率和狗的概率,并将它们转换为 0 到 1 之间的 1 个数字。我确实使用了
np.argmax,但它返回 0或者1.这个问题的评分算法不同,也接受浮动值
标签: python tensorflow neural-network classification kaggle