【问题标题】:Im not getting correct accuracy for convolutional neural network我没有得到卷积神经网络的正确精度
【发布时间】:2018-06-18 17:01:07
【问题描述】:

我没有得到关于狗与猫分类问题的输出。我使用了来自 kaggle 的数据集来分类狗和猫,我使用了学习率为 1e-3 的 Adam 优化器,它没有提供所需的准确度。该模型基于使用 tflearn 的卷积神经网络。但它给出了 50% 的准确率,我尝试过使用不同类型的卷积层,我也尝试过调整超参数,但它的准确率仍然保持在 50% 左右。

import tflearn
import numpy as np
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression

IMG_SIZE = 64
learningRate = 1e-3
MODEL_NAME = 'dogsvscats.model'


train_data = np.load('dog_vs_cat/train_data.npy')

trainData = train_data[:-int(0.33*train_data.shape[0])]
validationData = train_data[-int(0.33*train_data.shape[0]):]

x_train = np.array([i[0] for i in trainData]).reshape(-1,IMG_SIZE,IMG_SIZE,1)
y_train = np.array([i[1] for i in trainData])

x_validation = np.array([i[0] for i in validationData]).reshape(-1,IMG_SIZE,IMG_SIZE,1)
y_validation = np.array([i[1] for i in validationData])

convnet = input_data(shape=[None, IMG_SIZE, IMG_SIZE, 1], name='input')

convnet = input_data(shape=[None, IMG_SIZE, IMG_SIZE, 1], name='input')

convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = fully_connected(convnet, 1024, activation='relu')
convnet = dropout(convnet, 0.7)

convnet = fully_connected(convnet, 2, activation='softmax')
convnet = regression(convnet, optimizer='adam', learning_rate=learningRate, loss='categorical_crossentropy', name='targets')

model = tflearn.DNN(convnet, tensorboard_dir='log')

model.fit({'input': x_train}, {'targets': y_train}, n_epoch=10, validation_set=({'input': x_validation}, {'targets': y_validation}), snapshot_step=500, show_metric=True, run_id=MODEL_NAME)

model.save(MODEL_NAME)

模型的输出是:

Training Step: 5239  | total loss: 11.20254 | time: 3.820s
| Adam | epoch: 020 | loss: 11.20254 - acc: 0.5135 -- iter: 16704/16750
Training Step: 5240  | total loss: 11.19760 | time: 4.985s
| Adam | epoch: 020 | loss: 11.19760 - acc: 0.5137 | val_loss: 11.57712 - val_acc: 0.4972 -- iter: 16750/16750

【问题讨论】:

    标签: tensorflow machine-learning deep-learning convolutional-neural-network


    【解决方案1】:

    如果你尝试,

    convnet = fully_connected(convnet, 1, activation='sigmoid')
    convnet = regression(convnet, optimizer='adam', learning_rate=learningRate, loss='binary_crossentropy', name='targets')
    

    [请检查 tf 的参数名称,我只使用 Keras]

    您应该获得更好的准确性。但主要问题是为什么你需要使用

    convnet = dropout(convnet, 0.7)
    

    先试试 drop out 0.2 左右?

    【讨论】:

    • 感谢您的回复,但我的目标值是 [0,1] 或 [1,0] 的形式,例如 [dog , cat] 所以,它不起作用
    • 啊,好的,您是否尝试过降低丢弃值?会影响训练吗?
    • 不,较低的 dropout 值不会影响训练,它仍然可以获得大约 50% 的准确率。
    猜你喜欢
    • 2018-07-14
    • 2017-01-02
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2015-12-15
    • 2015-04-09
    相关资源
    最近更新 更多