我用VGG16收集了手写数字和火车模型 制作的模型是 Sequential
from keras import models
from keras import layers
from keras import optimizers
model = models.Sequential()
model.add(layers.Dense(1024, activation='relu', input_dim=7 * 7 * 512))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(63, activation='softmax'))
model.compile(optimizer= tensorflow.keras.optimizers.RMSprop(learning_rate=2e-4),
loss='categorical_crossentropy',
metrics=['acc'])
我将名称保存为 modeldata.h5 并加载它。
# load the handwriting OCR model
from keras.models import load_model
args = {}
args["model"] = '/content/drive/MyDrive/project/modeldata.h5'
model = load_model(args["model"] )
这是我的模型.summary()
然后我想预测数字8的图像。
from tensorflow.keras.utils import load_img
from google.colab.patches import cv2_imshow
from matplotlib import pyplot as plt
img = '/content/drive/MyDrive/project/Dataset/DATA3/78/78_10.png'
image= cv2.imread(img)
cv2_imshow(image)
plt.imshow(image.reshape(224, 224),cmap='Greys')
pred = model.predict(image.reshape(1, 224, 224, 1))
print("From which the max choice is:", pred.argmax())
请帮我解决它!我有模型,但我不知道如何预测数字。 我要的结果是我的模型可以预测这张图片。
这里其实有很多问题。 2个主要问题是:
这是我的预训练代码
from tensorflow.keras.applications import VGG16
vgg_conv = VGG16(weights='imagenet',
include_top=False,
input_shape=(224, 224, 3))
vgg_conv.summary()
train_datagen = ImageDataGenerator(rescale = 1./255,validation_split = 0.2)
train_dir = ('/content/drive/MyDrive/project/Dataset/DATA')
batch_size = 32
train_generator = train_datagen.flow_from_directory (
train_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode='categorical',
shuffle=True,
subset='training')
nTrain = 37800
batch_size = 32
train_features = np.zeros(shape=(nTrain, 7,7,512))
train_labels = np.zeros(shape=(nTrain,76))
i = 0
for inputs_batch, labels_batch in train_generator:
features_batch = vgg_conv.predict(inputs_batch)
train_features[i * batch_size : (i + 1) * batch_size] = features_batch
train_labels[i * batch_size : (i + 1) * batch_size] = labels_batch
i += 1
if i * batch_size >= nTrain:
break
train_features = np.reshape(train_features,(nTrain,7*7*512))
并训练验证
validation_dir = ('/content/drive/MyDrive/project/Dataset/DATA')
batch_size = 32
validation_generator = train_datagen.flow_from_directory(
validation_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode='categorical',
shuffle=False,
subset='validation')
nVal = 9450
batch_size = 32
validation_features = np.zeros(shape=(nVal, 7, 7, 512))
validation_labels = np.zeros(shape=(nVal,63))
i = 0
for inputs_batch, labels_batch in validation_generator:
features_batch = vgg_conv.predict(inputs_batch)
validation_features[i * batch_size : (i + 1) * batch_size] = features_batch
validation_labels[i * batch_size : (i + 1) * batch_size] = labels_batch
i += 1
if i * batch_size >= nVal:
break
validation_features = np.reshape(validation_features, (nVal, 7*7*512))
然后
from keras import models
from keras import layers
from keras import optimizers
model = models.Sequential()
model.add(layers.Dense(1024, activation='relu', input_dim=7 * 7 * 512))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(63, activation='softmax'))
model.compile(optimizer= tensorflow.keras.optimizers.RMSprop(learning_rate=2e-4),
loss='categorical_crossentropy',
metrics=['acc'])
filepath="/content/drive/My Drive/model/modeldata3-{epoch:02d}-{val_acc:.4f}.hdf5"
checkpoint = ModelCheckpoint(filepath,monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]
epochs=100
history = model.fit(train_features,
train_labels,
epochs=epochs,
batch_size=batch_size,
validation_data=
(validation_features,validation_labels),callbacks=callbacks_list)
model.save("modeldata.h5")