Tensorflow mnist编号分类,但使用您自己的数据集

Tensorflow mnist编号分类,但使用您自己的数据集,tensorflow,conv-neural-network,mnist,Tensorflow,Conv Neural Network,Mnist,下面的代码工作得非常好,但是我想用这个模型和我自己的一组图像进行训练和预测,我发现这个模型最适合我的一组图像,因为它可以识别随机的黑线(数字),但我被限制在x_列和y_列部分,我有11个不同类别的我自己的图像集,并希望将此模型应用于它们,但我不知道如何将它们与此模型联系起来,例如: train= 'C:\\Users\\min2\\Desktop\\cnn\\train' ---> contains 11 different classes separated by folders t

下面的代码工作得非常好,但是我想用这个模型和我自己的一组图像进行训练和预测,我发现这个模型最适合我的一组图像,因为它可以识别随机的黑线(数字),但我被限制在x_列和y_列部分,我有11个不同类别的我自己的图像集,并希望将此模型应用于它们,但我不知道如何将它们与此模型联系起来,例如:

train= 'C:\\Users\\min2\\Desktop\\cnn\\train'   ---> contains 11 different classes separated by folders
test= 'C:\\Users\\min2\\Desktop\\cnn\\test'     ---> contains 11 different classes separated by folders
我已经研究了x_tain,x_test,y_train,y_test是做什么的,但我不确定如何关联我自己的一组图像而不是一组数字。 我认为这段代码的前两部分是关于处理图像集的,第3部分和第4部分是关于cnn模型、训练和预测的

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

rows, cols = 28, 28

x_train = x_train.reshape(x_train.shape[0], rows, cols, 1)
x_test = x_test.reshape(x_test.shape[0], rows, cols, 1)

input_shape = (rows, cols, 1)

----------------------------------------------------------------------

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train = x_train / 255.0
x_test = x_test / 255.0

y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)

----------------------------------------------------------------------

def build_lenet(input_shape):
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(filters=6,
                                    kernel_size=(5, 5),
                                    strides=(1, 1),
                                    activation='tanh',
                                    input_shape=input_shape))
    
    model.add(tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
                                              strides=(2,2)))
    
    model.add(tf.keras.layers.Conv2D(filters=16,
                                   kernel_size=(5, 5),
                                   strides=(1, 1),
                                   activation='tanh'))
    
    model.add(tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2)))
    
    model.add(tf.keras.layers.Flatten())

    model.add(tf.keras.layers.Dense(units=120, activation='tanh'))

    model.add(tf.keras.layers.Flatten())

    model.add(tf.keras.layers.Dense(units=84, activation='tanh'))

    model.add(tf.keras.layers.Dense(units=10, activation='softmax'))

    model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.SGD(lr=0.1, momentum=0.0, decay=0.0),
             metrics=['accuracy'])

    return model

-------------------------------------------------------------------------------------

lenet = build_lenet(input_shape)

epochs = 10

history = lenet.fit(x_train, y_train,
                   epochs=epochs,
                   batch_size=128,
                   verbose=1)
loss, acc= lenet.evaluate(x_test, y_test)
print('ACCURACY: ', acc)

x_train=x_train.reshape(x_train.shape[0], 28, 28)
print("Test Data", x_test.shape, y_test.shape)

x_test=x_test.reshape(x_test.shape[0], 28, 28)
print("Test Data", x_test.shape, y_test.shape)

image_index = 4444
plt.imshow(x_test[image_index].reshape(28, 28), cmap='Greys')

pred = lenet.predict(x_test[image_index].reshape(1, rows, cols, 1))
print(pred.argmax())


您应该使用自己的数据集加载器更改
(x\u-train,y\u-train),(x\u-test,y\u-test)=mnist.load\u data()

使用
tf.keras.preprocessing.image\u dataset\u from\u directory
从本地目录加载图像,或者您可以使用
keras ImageDataGenerator
函数来完成此操作。

本教程是否有帮助?Keras在TensorFlow 2.5中有一个预处理功能,可以直接从目录导入图像:tf.Keras.preprocessing.image_dataset_from_directory