Python 神经网络的准确度很差

Python 神经网络的准确度很差,python,tensorflow,neural-network,classification,kaggle,Python,Tensorflow,Neural Network,Classification,Kaggle,我正试图解决卡格尔的问题。这是一个简单的图像分类问题。然而,我做的比得分为17+的随机预测更糟糕。有人知道为什么会这样吗 神经网络模型 输出没有激活功能 预测、优化器和损失函数 这些图像被转换成一个128x128x3大小的numpy数组,并以64的批量输入神经网络 编辑:为200个时代运行相同的代码。没有改善。我做得稍微差一点 提高准确性不仅仅是一项任务的解决方案,您可以尝试以下几种方法: 尝试不同的梯度优化,SGD,动量,nestrov,adap。。。 尝试自适应学习率 改进正则化方法L1、

我正试图解决卡格尔的问题。这是一个简单的图像分类问题。然而,我做的比得分为17+的随机预测更糟糕。有人知道为什么会这样吗

神经网络模型

输出没有激活功能

预测、优化器和损失函数

这些图像被转换成一个128x128x3大小的numpy数组,并以64的批量输入神经网络


编辑:为200个时代运行相同的代码。没有改善。我做得稍微差一点

提高准确性不仅仅是一项任务的解决方案,您可以尝试以下几种方法:

尝试不同的梯度优化,SGD,动量,nestrov,adap。。。 尝试自适应学习率 改进正则化方法L1、L2、dropout、DropConnect。。。 增加您的培训数据,获得更多数据。 更改网络超参数 最后,如果没有任何帮助,网络结构也会发生改变。
提高准确性不仅仅是一项任务解决方案,您可以尝试以下几种方法:

尝试不同的梯度优化,SGD,动量,nestrov,adap。。。 尝试自适应学习率 改进正则化方法L1、L2、dropout、DropConnect。。。 增加您的培训数据,获得更多数据。 更改网络超参数 最后,如果没有任何帮助,网络结构也会发生改变。
这更多的是一个评论,但没有足够的特权点:

您是否对数据进行了规范化,即将像素值除以255?我看不到你在剧本里这么做


当你得到像17 logloss这样糟糕的结果时,这意味着你的模型总是以100%的置信度预测一个类。通常在这种情况下,不是架构、学习率或时代数,而是一些愚蠢的错误,比如忘记规范化或混淆标签。对于这个特定的问题,考虑到您的体系结构,您应该可以看到在40个历元内的准确率约为80%和0.4 logloss。不需要数千个时代:

这更多是一个评论,但没有足够的特权点:

您是否对数据进行了规范化,即将像素值除以255?我看不到你在剧本里这么做


当你得到像17 logloss这样糟糕的结果时,这意味着你的模型总是以100%的置信度预测一个类。通常在这种情况下,不是架构、学习率或时代数,而是一些愚蠢的错误,比如忘记规范化或混淆标签。对于这个特定的问题,考虑到您的体系结构,您应该可以看到在40个历元内的准确率约为80%和0.4 logloss。不需要数千个纪元:

20个纪元似乎离我们太近了。。。你也需要一个相当大的训练集来做这个。。。训练可能需要很多小时。。。你可能想看看已经训练过的谷歌初始模型,看看你用这个循环做了什么?为什么不是np.argmax或什么的?@Joran Beasley是的,20个时代似乎少了,但它至少应该做一个像样的预测吗?我的训练集有25k个图像。你建议有多少个时代?实际上我想学习神经网络,这就是为什么我不使用预先训练过的模型:另请参见:@martianwars这个循环是取2个概率,prob代表猫,prob代表狗,并将它们转换成0到1之间的1个数字。我确实使用了np.argmax,但它返回0或1。这个问题的评分算法不同,接受20个时代的浮点值似乎不够。。。你也需要一个相当大的训练集来做这个。。。训练可能需要很多小时。。。你可能想看看已经训练过的谷歌初始模型,看看你用这个循环做了什么?为什么不是np.argmax或什么的?@Joran Beasley是的,20个时代似乎少了,但它至少应该做一个像样的预测吗?我的训练集有25k个图像。你建议有多少个时代?实际上我想学习神经网络,这就是为什么我不使用预先训练过的模型:另请参见:@martianwars这个循环是取2个概率,prob代表猫,prob代表狗,并将它们转换成0到1之间的1个数字。我确实使用了np.argmax,但它返回0或1。这个问题的评分算法不同,接受浮动值,因为我没有将输入图像从255标准化为1。但是标准化会产生如此巨大的差异吗?是的,它通常会产生很大的差异。我还没有将输入图像从255标准化为1。但是标准化会有很大的不同吗?是的,它通常会有很大的不同。虽然这些是一些好的技术,但这适用于80%准确率的人,他们试图达到85%的准确率。在我的情况下,如果你不相信,我甚至不会超过55%,所以这就是最后一点所说的。更改算法/结构,虽然这些是一些好的技术,但这将适用于准确率为80%的tr患者
应达到85%的准确率。在我的情况下,如果你不相信,我甚至不会超过55%,所以这就是最后一点所说的。更改算法/结构,
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)