首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >神经网络的精度很差

神经网络的精度很差
EN

Stack Overflow用户
提问于 2016-12-30 16:53:34
回答 2查看 1.4K关注 0票数 1

我试图解决卡格尔的狗对猫的残杀:内核版问题。这是一个简单的图像分类问题。然而,我做的比一个17+分数的随机预测器更糟糕。有人知道为什么会这样吗?

神经网络模型

代码语言:javascript
复制
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

输出没有激活函数。

预测、优化及损失函数

代码语言:javascript
复制
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个时代运行了相同的代码。没有改善。我做的更糟。

EN

回答 2

Stack Overflow用户

发布于 2017-01-11 23:56:30

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

您是否将数据规范化(即将像素值除以255)?你看不出剧本里是怎么做的。

当你得到可怕的结果,比如17次日志丢失,这意味着你的模型总是以100%的信心预测一个类别。通常,在这种情况下,它不是架构、学习速度或时代的数量,而是一些愚蠢的错误,比如忘记标准化或混淆标签。对于这个特定的问题,并考虑到您的体系结构,您应该可以看到在40个历元内,大约80%的准确性和0.4的日志丢失。不需要几千个时代:)

票数 3
EN

Stack Overflow用户

发布于 2016-12-31 14:20:03

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

  • 尝试不同的梯度优化,SGD,动量,nestrov,adap,.
  • 尝试自适应学习率
  • 改进正则化方法L1,L2,退出,下降连接。
  • 增加您的培训数据(有更多的数据)。
  • 更改网络超级参数
  • 最后,如果没有帮助改变网络结构的话。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41399752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档