如何解决mnist 数字分类但使用您自己的数据集
下面的这段代码工作得很好,但我想用我自己的一组图像来训练和预测这个模型,我发现这个模型最适合我的一组图像,因为它可以识别随机黑线(数字)但是我被限制在 x_train 和 y_train 部分,我有 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 的用途,但我不确定如何关联自己的一组图像而不是 mnist 的一组数字。 我觉得这段代码的前两部分是关于处理图像集的,第三部分和第四部分是关于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],1)
input_shape = (rows,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,activation='tanh'))
model.add(tf.keras.layers.AveragePooling2D(pool_size=(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],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,1))
print(pred.argmax())
解决方法
您应该使用自己的数据集加载器更改 (x_train,y_train),(x_test,y_test) = mnist.load_data()
。
使用 tf.keras.preprocessing.image_dataset_from_directory
从本地目录加载图像,或者您可以使用 keras ImageDataGenerator
函数来完成此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。