【发布时间】:2021-09-19 06:42:39
【问题描述】:
我正在训练一个包含 10 个类的 CNN。训练文件夹每个类有 40 个图像,验证文件夹每个类有 10 个图像。我有一个包含 100 个测试图像的文件夹。如何加载它们(通过使用 imagedatagenerator),然后使用我训练的模型进行预测?每次我为相同的测试数据运行 model.predict() 时,我都会得到不同的预测。这是我正在使用的数据集的链接 https://www.kaggle.com/s214316001/datasets214 。这是我的代码
import tensorflow as tf
import matplotlib.pyplot as plt
import cv2
import os
import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D,BatchNormalization,Dropout
train = ImageDataGenerator(rescale = 1/255)
train_dataset = train.flow_from_directory('../input/datasets214/train/train',
target_size = (200,200),batch_size = 5,
class_mode = 'categorical')
validation_dataset=train.flow_from_directory('../input/datasets214/validation/validation',
target_size = (200,200),batch_size = 5,
class_mode = 'categorical')
model = Sequential()
model.add(Conv2D(16, (3, 3), input_shape=(200,200,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(train_dataset,steps_per_epoch=5,epochs=300,validation_data=validation_dataset)
#prediction
datagen = ImageDataGenerator(rescale=1/255)
gen =datagen.flow_from_directory('../input/datasets214/gnr_test/gnr_test',shuffle = 'False',batch_size=100,
target_size = (200,200),classes = ['test'])
predict = model.predict(gen)
print(' fileID','label')
for file,i in enumerate(gen.filenames):
j = predict[file]
k = list(j).index(max(j))
print( i,k)
【问题讨论】:
-
那么他有什么问题?你有错误吗?
-
每次对相同的测试数据运行 model.predict() 时,我都会得到不同的预测。
-
您需要用代码及其结果来证明这一点。
标签: python tensorflow keras conv-neural-network