简体   繁体   English

在 MNIST 数据集上训练后,如何在 keras 中使用 cnn 预测我自己的图像

[英]how to predict my own image using cnn in keras after training on MNIST dataset

I have made a convolutional neural.network to predict handwritten digits using MNIST dataset but now I am stuck at predicting my own image as input to cnn,I have saved weights after training cnn and want to use that to predict my own image (NOTE: care is taken that my input image is 28x28)我已经制作了一个卷积神经网络来使用 MNIST 数据集预测手写数字,但现在我坚持预测我自己的图像作为 cnn 的输入,我在训练 cnn 后保存了权重并想用它来预测我自己的图像(注意:注意我的输入图像是 28x28)

code:代码:

new_mnist.py: new_mnist.py:

ap = argparse.ArgumentParser()
ap.add_argument("-s", "--save-model", type=int, default=-1,
help="(optional) whether or not model should be saved to disk")  
ap.add_argument("-l", "--load-model", type=int, default=-1,
help="(optional) whether or not pre-trained model should be loaded")
ap.add_argument("-w", "--weights", type=str,
help="(optional) path to weights file")
args  = vars(ap.parse_args())

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)

# load data
print("[INFO] downloading data...")
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# reshape to be [samples][pixels][width][height]
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')
print(X_test.shape[0])

# normalize inputs from 0-255 to 0-1
X_train = X_train / 255
X_test = X_test / 255
# one hot encode outputs
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]

# build the model
print("[INFO] compiling model...")
model = LeNet.build(num_classes = num_classes,weightsPath = args["weights"]          if args["load_model"] > 0 else None)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

if args["load_model"] < 0:
# Fit the model
print("[INFO] training...")
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=1,    batch_size=200, verbose=2)
# Final evaluation of the model
print("[INFO] evaluating...")
scores = model.evaluate(X_test, y_test, verbose=0)
print("Baseline Error: %.2f%%" % (100-scores[1]*100))
elif args["load_model"] > 0:
im = imread("C:\\Users\\Divyesh\\Desktop\\mnist.png")
im = im/255
pr = model.predict_classes(im)
print(pr)

# check to see if the model should be saved to file
if args["save_model"] > 0:
print("[INFO] dumping weights to file...")
model.save_weights(args["weights"], overwrite=True)

l.net.py: l.net.py:

class LeNet:
@staticmethod
def build(num_classes,weightsPath = None):
# create model
    model = Sequential()
    model.add(Convolution2D(30, 5, 5, border_mode='valid', input_shape=(1, 28, 28), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Convolution2D(15, 3, 3, activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.2))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(50, activation='relu'))
    model.add(Dense(num_classes, activation='softmax'))
    # Compile model
    #model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    if weightsPath is not None:
        model.load_weights(weightsPath)
    return model

in new_mnist.py I have called predict(im) in which im is 28x28 image but after running this program I get error as:在 new_mnist.py 中,我调用了 predict(im),其中 im 是 28x28 图像,但在运行该程序后出现错误:

ValueError: Error when checking : expected conv2d_1_input to have 4      dimensions, but got array with shape (28, 28)

HELP!!!帮助!!!

Try: 尝试:

pr = model.predict_classes(im.reshape((1, 1, 28, 28)))

Here : first dimension comes from examples (you need to specify it even if you have only one example), second comes from channels (as it seems that you use Theano backend) and rest are spatial dimensions. 这里:第一个维度来自示例(即使您只有一个示例,也需要指定它),第二个来自通道(因为它似乎使用Theano后端),其余是空间维度。

It should be noted that the images must be uploaded in grayscale.需要注意的是,上传的图片必须是灰度的。

  1. Like:喜欢:

im = im[:,:,0]

  1. Or要么

import cv2

im = cv2.imread('C:\\Users\\Divyesh\\Desktop\\mnist.png', cv2.IMREAD_GRAYSCALE)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将 Keras MNIST 数据集与我自己的 MNIST 图像相结合? - How to combine Keras MNIST dataset with my own MNIST images? 训练后如何使用带有 keras 的 VGG16 预测图像(外部数据集)? - How can i predict images(outside dataset) using VGG16 with keras after training? 使用 keras 训练 CNN 后预测特定图像的类别 - predicting class of perticular image after training CNN using keras 使用theano和keras训练mnist数据集时出现AssertionError - AssertionError while training mnist dataset using theano and keras 如何创建自己的mnist数据集? - how to make my own mnist dataset? MNIST 数据集上的可变图像输入分辨率问题(使用 CNN 时) - Issue with variable image input resolution on MNIST dataset (while using CNN) 如何在 Keras 的每个训练周期后进行预测? - How to predict after each epoch of training in Keras? 如何使用Mnist预测特定图像 - How to predict a specific image using Mnist 如何在python中加载我自己的数据或在线数据集以训练CNN或自动编码器? - how to load my own data or online dataset in python for training CNN or autoencoder? 如何在 NLP 中训练数据集后预测 label - How to predict the label after training the dataset in NLP
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM