подаю картинку 720х1280х3 модель принимает Nonex1280x3 Keras
Моя модель:
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 чтобы получить размерность входа. Вот как осуществляю predict:
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
Можете подсказать, в чём может быть проблема?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
print ничего не возвращает, т.е. возвращает None, можно сказать. А слой Lambda используется для преобразования данных. Получается, что на выходе этого слоя вы вместо входных данных получаете None. Быстрый фикс может выглядеть так:
self.model.add(Lambda(lambda x: print(x.shape) or x))
^^^^ возвращаем в итоге x
Но вообще наверняка в Keras есть более подходящий слой для вывода отладочной информации.
P.S. Посмотреть вход первого слоя вроде бы можно так:
print(model.get_layer(index=0).input)