如何解决为什么我的CNN模型的恢复培训代码给我这个错误?
我正在尝试构建对猫和狗图像进行分类的CNN,但是当我尝试运行代码以恢复对模型的训练时,会引发错误。这是我的模型恢复训练代码:
from keras import Sequential
from keras_preprocessing.image import ImageDataGenerator
from keras.layers import *
from keras.callbacks import ModelCheckpoint
from keras.optimizers import *
from keras.models import *
import keras
import numpy as np
import os
img_size = 200 # number of pixels for width and height
#Random Seed
np.random.seed(17897)
training_path = os.getcwd() + "/cats and dogs images/train"
testing_path = os.getcwd() + "/cats and dogs images/test"
#Loads the Model
model = load_model('trained_model.h5')
#Scales the pixel values to between 0 to 1
datagen = ImageDataGenerator(rescale=1.0/255.0)
Batch_size = 10
#Prepares Training Data
training_dataset = datagen.flow_from_directory(directory = training_path,target_size=(img_size,img_size),classes = ["cat","dog"],class_mode = "categorical",batch_size = Batch_size)
#Prepares Testing Data
testing_dataset = datagen.flow_from_directory(directory = testing_path,batch_size = Batch_size)
#Recompiles model
#model.compile(loss="binary_crossentropy",optimizer="adam",metrics=['accuracy'])
#Checkpoint
filepath = os.getcwd() + "/trained_model.h5"
checkpoint = ModelCheckpoint(filepath,monitor='loss',verbose=1,save_best_only=True,mode='min',save_freq=1)
#Fitting the model to the dataset (Training the Model)
model.fit(x = training_dataset,steps_per_epoch = 400,validation_data=testing_dataset,validation_steps=100,epochs = 10,callbacks=[checkpoint],verbose = 1)
# evaluate model on training dataset
_,acc = model.evaluate(training_dataset,steps=len(training_dataset),verbose=1)
print("Accuracy on training dataset:")
print('> %.3f' % float(acc * 100.0))
#evaluate model on testing dataset
_,acc = model.evaluate(testing_dataset,steps=len(testing_dataset),verbose=1)
print("Accuracy on testing dataset:")
print('> %.3f' % (acc * 100.0))
但是,当我运行代码时,出现此错误:
Found 4000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
Epoch 1/10
Traceback (most recent call last):
File "C:\Users\Jackson\Documents\Programming\Python Projects\Neural Network That Deteremines Cats and Dogs\Retraining Network.py",line 52,in <module>
model.fit(x = training_dataset,verbose = 1)
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py",line 108,in _method_wrapper
return method(self,*args,**kwargs)
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py",line 1098,in fit
tmp_logs = train_function(iterator)
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py",line 780,in __call__
result = self._call(*args,**kwds)
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py",line 846,in _call
return self._concrete_stateful_fn._filtered_call(canon_args,canon_kwds) # pylint: disable=protected-access
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py",line 1843,in _filtered_call
return self._call_flat(
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py",line 1923,in _call_flat
return self._build_call_outputs(self._inference_function.call(
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py",line 545,in call
outputs = execute.execute(
File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\execute.py",line 59,in quick_execute
tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle,device_name,op_name,tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 6400000 values,but the requested shape requires a multiple of 1000000
[[node sequential/flatten/Reshape (defined at C:\Users\Jackson\Documents\Programming\Python Projects\Neural Network That Deteremines Cats and Dogs\Retraining Network.py:52) ]] [Op:__inference_train_function_674]
Function call stack:
train_function
我在做错什么,因为代码似乎与构建模型并对其进行训练的训练代码完全相同:
from keras import Sequential
from keras_preprocessing.image import ImageDataGenerator
from keras.layers import *
from keras.callbacks import ModelCheckpoint
from keras.optimizers import *
import keras
import numpy as np
import os
img_size = 250 # number of pixels for width and height
#Random Seed
np.random.seed(123456789)
training_path = os.getcwd() + "/cats and dogs images/train"
testing_path = os.getcwd() + "/cats and dogs images/test"
#Defines the Model
model = Sequential([
Conv2D(filters=128,kernel_size=(3,3),activation="relu",padding="same",input_shape=(img_size,img_size,3)),MaxPool2D(pool_size=(2,2),strides=2),Conv2D(filters=64,padding="same"),Flatten(),Dense(32,activation="relu"),Dense(2,activation="softmax")
])
#Scales the pixel values to between 0 to 1
datagen = ImageDataGenerator(rescale=1.0/255.0)
Batch_size = 10
#Prepares Training Data
training_dataset = datagen.flow_from_directory(directory = training_path,batch_size = Batch_size)
#Compiles the model
#model.compile(loss="categorical_crossentropy",optimizer="sgd",metrics=['accuracy'])
model.compile(loss="binary_crossentropy",metrics=['accuracy'])
#model.compile(loss="mse",metrics=[keras.metrics.MeanSquaredError()])
#Checkpoint
filepath = os.getcwd() + "/trained_model.h5"
checkpoint = ModelCheckpoint(filepath,acc = model.evaluate_generator(training_dataset,verbose=0)
print("Accuracy on training dataset:")
print('> %.3f' % (acc * 100.0))
#evaluate model on testing dataset
_,acc = model.evaluate_generator(testing_dataset,verbose=0)
print("Accuracy on testing dataset:")
print('> %.3f' % (acc * 100.0))
这段代码可以完美运行,没有任何错误,那么上面的代码为什么不起作用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。