我如何改善数字预测?

时间:2019-06-10 15:23:22

标签: python-3.x tensorflow keras predict cv2

我有一些数字分类模型,在测试数据上它可以正常工作,但是当我想对其他图像进行分类时,我遇到的问题是我的模型无法准确预测它是什么数字。请帮我改善model.predict()的性能。

我尝试了多种方式训练我的模型,下面的代码中有一个创建分类模型的函数,我实际上以多种方式训练了这个模型,[1K

def load_data():
    (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

    train_images = tf.keras.utils.normalize(train_images, axis = 1)
    test_images = tf.keras.utils.normalize(test_images, axis = 1)

    return (train_images, train_labels), (test_images, test_labels)

def create_model():
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
    model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
    model.add(tf.keras.layers.Dense(10, activation = tf.nn.softmax))

    data = load_data(n=60000, k=5)
    model.compile(optimizer ='adam',
             loss='sparse_categorical_crossentropy',
             metrics=['accuracy'])
    model.fit(data[0][0][:n], data[0][1][:n], epochs = e)# ive tried from 3-50 epochs
    model.save(config.model_name)

def load_model():
    return tf.keras.models.load_model(config.model_name)def predict(images):
    try:
        model = load_model()
    except:
        create_model()
        model = load_model()
    images = tf.keras.utils.normalize(images, axis = 0)
    d = load_data()

    plot_many_images([d[0][0][0].reshape((28,28)), images[0]],['data', 'image'])

    predictions = model.predict(images)
    return predictions

我认为我的输入数据看起来并不像该数据在预测模型,但是我已经尽力使其与之相似。在这张图片(https://imgur.com/FfLGMEK)的左边是火车数据图像,而右边是我解析的图像,它们都是28x28像素,都是cv2.noramalized

对于我使用过此(https://imgur.com/RMfKtag)数独的测试图像预测,其格式已经与测试数据编号相似,但是当我使用模型预测对图像进行测试时,结果不是很好(https://imgur.com/RQFvLNE) 如您所见,预测数据还有很多不足之处。

P.S。我的手得出的预测数据结果中的('')项(我已经用''代替了该位置的数字),因为预测后cos都具有一定的值(1-9),所以现在不需要了。

1 个答案:

答案 0 :(得分:0)

“在测试数据上可以正常工作”是什么意思?如果您的意思是说它的工作原理适合训练数据,但对测试数据却没有很好的预测,则可能是您的模型在训练阶段过拟合。我建议使用培训/验证/测试方法来培训您的网络。