【发布时间】:2020-03-30 04:14:37
【问题描述】:
我创建了一个模型,该模型利用深度学习使用 CNN 对输入数据进行分类。虽然分类是多类的,但实际上有 5 个类。在训练模型似乎很好,即它不会过拟合或欠拟合。然而,在保存和加载模型时,无论输入图像如何,我总是得到相同的输出。最终的预测数组包含所有类的输出为 0。
所以,我不确定该模型是否没有预测任何东西,或者它总是产生相同的结果。
我使用tensorboard找到最佳拟合模型后创建的模型如下。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.callbacks import TensorBoard
import pickle
import time
X=pickle.load(open("X.pickle","rb"))
y=pickle.load(open("y.pickle","rb"))
X=X/255.0
dense_layers=[0]
layer_sizes=[64]
conv_layers=[3]
for dense_layer in dense_layers:
for layer_size in layer_sizes:
for conv_layer in conv_layers:
NAME="{}-conv-{}-nodes-{}-dense-{}".format(conv_layer,layer_size,dense_layer,int(time.time()))
print(NAME)
tensorboard=TensorBoard(log_dir='logs\{}'.format(NAME))
model = Sequential()
model.add(Conv2D(layer_size, (3,3), input_shape=X.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
for l in range(conv_layer-1):
model.add(Conv2D(layer_size, (3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
for l in range(dense_layer):
model.add(Dense(layer_size))
model.add(Activation('relu'))
model.add(Dense(5))
model.add(Activation('sigmoid'))
model.compile(loss='sparse_categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(X,y,batch_size=32,epochs=10,validation_split=0.3,callbacks=[tensorboard])
model.save('0x64x3-CNN-latest.model')
加载模型sn-p如下,
import cv2
import tensorflow as tf
CATEGORIES= ["fifty","hundred","ten","thousand","twenty"]
def prepare(filepath):
IMG_SIZE=100
img_array=cv2.imread(filepath)
new_array=cv2.resize(img_array,(IMG_SIZE,IMG_SIZE))
return new_array.reshape(-1,IMG_SIZE,IMG_SIZE,3)
model=tf.keras.models.load_model("0x64x3-CNN-latest.model")
prediction=model.predict([prepare('30.jpg')])
print(prediction)
输出总是[[0. 0. 0. 0. 0.]]。
转换为类别时,结果总是五十个。
我的数据集包含近 2200 张图片,每个类别平均有 350-500 张图片。
有人可以帮忙解决这个问题吗?
【问题讨论】:
-
请出示您用来保存模型的代码。
-
另外,包括 model.summary() 输出。
-
包括你的 tensorflow 版本,因为 tensorflow 2.x 有新的方法来保存模型。
-
我已经添加了用于保存模型的代码@FelipeBorges。提前致谢。
-
感谢您的宝贵建议@furcifer
标签: python tensorflow keras deep-learning conv-neural-network