如何根据手写数字预测模型?

问题描述 投票:0回答:2

我用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())

这是一个错误

请帮我解决它!我有模型,但我不知道如何预测数字。 我要的结果是我的模型可以预测这张图片。

python arrays google-colaboratory training-data predict
2个回答
1
投票

这里其实有很多问题。 2个主要问题是:

  1. 为什么你的input_dim=7 * 7 * 512?我看到您想将图像重塑为 224、224,那么您的 input_dim 应该是 224*224。
  2. 你不能只将图像重塑为 224x224,你需要调整它的大小。你可以用 cv2.resize 做到这一点,这里有一些例子:https://www.geeksforgeeks.org/image-resizing-using-opencv-python/

0
投票

这是我的预训练代码

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")
© www.soinside.com 2019 - 2024. All rights reserved.