【发布时间】:2021-07-10 09:18:21
【问题描述】:
我正在使用 Keras 训练 CNN。模型架构如下:
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 3),padding='same'))
model.add(layers.MaxPooling2D((2, 2),strides=(2,2), padding='same'))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(layers.MaxPooling2D((2, 2),strides=(2,2), padding='same'))
model.add(layers.Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(layers.MaxPooling2D((2, 2), strides=(2,2),padding='same'))
model.add(layers.Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(layers.MaxPooling2D((2, 2),strides=(2,2), padding='same'))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
模型的编译和拟合部分是:
model.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(lr=1e-4),metrics=['acc'])
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_dir,target_size=(150, 150),batch_size=20, class_mode='binary')
val_generator = test_datagen.flow_from_directory(val_dir,target_size=(150, 150),batch_size=20,class_mode='binary')
history = model.fit_generator(train_generator,steps_per_epoch=100,epochs=30,validation_data=val_generator,validation_steps=50)
这给了我以下错误:
warnings.warn('`Model.fit_generator` is deprecated and '
2021-07-10 13:04:09.841898: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)
Epoch 1/30
Traceback (most recent call last):
File "C:/Users/User/PycharmProjects/dog_vs_cat/model.py", line 33, in <module>
history = model.fit_generator(train_generator,steps_per_epoch=100,epochs=30,validation_data=val_generator,validation_steps=50)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 1932, in fit_generator
initial_epoch=initial_epoch)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 1158, in fit
tmp_logs = self.train_function(iterator)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\eager\def_function.py", line 889, in __call__
result = self._call(*args, **kwds)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\eager\def_function.py", line 950, in _call
return self._stateless_fn(*args, **kwds)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\eager\function.py", line 3024, in __call__
filtered_flat_args, captured_inputs=graph_function.captured_inputs) # pylint: disable=protected-access
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\eager\function.py", line 1961, in _call_flat
ctx, args, cancellation_manager=cancellation_manager))
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\eager\function.py", line 596, in call
ctx=ctx)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\eager\execute.py", line 60, in quick_execute
inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Default MaxPoolingOp only supports NHWC on device type CPU
[[node sequential/max_pooling2d/MaxPool (defined at \Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\layers\pooling.py:355) ]] [Op:__inference_train_function_1187]
Errors may have originated from an input operation.
Input Source operations connected to node sequential/max_pooling2d/MaxPool:
sequential/conv2d/Relu (defined at \Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend.py:4700)
Function call stack:
train_function
Process finished with exit code 1
我已经搜索过,建议使用data_format="channels_last" 作为我正在使用的输入形状。然后我用data_format="channels_first"将输入形状更改为(3,150,150),它仍然给出同样的错误。
我使用的是 Keras 2.4.3。
有什么帮助吗?
【问题讨论】:
-
你用什么作为输入层?
-
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 3),padding='same')) 看起来像我写问题时忽略了最重要的一层。
-
您的问题现在解决了吗?否则,可以尝试在独立代码中执行以复制您的问题吗?以便我们可以尽力帮助您。谢谢!
标签: python tensorflow keras deep-learning conv-neural-network