【发布时间】:2021-08-10 17:21:52
【问题描述】:
下面的代码工作得非常好,但我想将此模型与我自己的一组图像一起用于训练和预测,我发现这个模型最适合我的一组图像,因为它可以识别随机黑线(数字)但我被 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], 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())
【问题讨论】:
-
本教程对您有帮助吗? Keras在TensorFlow 2.5中有预处理功能,可以直接从目录导入图片:tf.keras.preprocessing.image_dataset_from_directorytensorflow.org/tutorials/load_data/…
标签: tensorflow conv-neural-network mnist