我的型号:
self.model = Sequential()
self.model.add(Lambda(lambda x: print(x.shape)))
self.model.add(InputLayer(input_shape=(720, 1280, 3)))
self.model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
self.model.add(Conv2D(64, (3, 3), activation='relu', padding='same', strides=2))
self.model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
self.model.add(Conv2D(128, (3, 3), activation='relu', padding='same', strides=2))
self.model.add(Conv2D(256, (3, 3), activation='relu', padding='same'))
self.model.add(Conv2D(256, (3, 3), activation='relu', padding='same', strides=2))
self.model.add(Conv2D(512, (3, 3), activation='relu', padding='same'))
self.model.add(Conv2D(256, (3, 3), activation='relu', padding='same'))
self.model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
self.model.add(UpSampling2D((2, 2)))
self.model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
self.model.add(UpSampling2D((2, 2)))
self.model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
self.model.add(Conv2D(2, (3, 3), activation='sigmoid', padding='same'))
self.model.add(UpSampling2D((2, 2)))
self.model.compile(optimizer="adam", loss="mse")
我在一开始就添加了Lambda来获取输入维度。这就是我的预测方式:
print(image.shape)
self.model.predict(image)
一开始运行程序后我得到:
(720, 1280, 3)
(None, 1280, 3)
(None, 1280, 3)
然后是错误:
Traceback (most recent call last):
File "C:\Users\Амаль\PreviuMaker\resizer\main.py", line 12, in <module>
print(resizer.predict(image))
File "C:\Users\Амаль\PreviuMaker\resizer\Model.py", line 32, in predict
return self.model.predict(image)
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\utils\traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\5C61~1\AppData\Local\Temp\__autograph_generated_fileo1wmzcyg.py", line 15, in tf__predict_function
retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
TypeError: in user code:
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2416, in predict_function *
return step_function(self, iterator)
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2401, in step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2389, in run_step **
outputs = model.predict_step(data)
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2357, in predict_step
return self(x, training=False)
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\utils\traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\input_spec.py", line 213, in assert_input_compatibility
raise TypeError(
TypeError: Exception encountered when calling layer 'sequential' (type Sequential).
Inputs to a layer should be tensors. Got 'None' (of type <class 'NoneType'>) as input for layer 'conv2d'.
Call arguments received by layer 'sequential' (type Sequential):
• inputs=tf.Tensor(shape=(None, 1280, 3), dtype=float32)
• training=False
• mask=None
你能告诉我可能是什么问题吗?
print
不返回任何内容,即None
有人可能会说,回报。该层Lambda
用于转换数据。事实证明,在这一层的输出中,您得到了None
. 快速修复可能如下所示:但总的来说,可能有
Keras
一个更适合输出调试信息的层。PS 你可以这样查看第一层的输入: