我是 Tensorflow 的新手,正在尝试训练特定的深度学习神经网络。我正在使用 Tensorflow (2.11.0) 获取深度神经网络模型,如下所述。我使用的数据也如下:
资料:
这里是一些示例数据。为了方便起见,我们可以考虑 10 个数据样本。在这里,每个样本都有形状:
(128,128)
.
可以将以下代码视为示例训练数据。
x_train = np.random.rand(10, 64, 64, 1)
归一化层:
normalizer = tf.keras.layers.Normalization(axis=-1)
normalizer.adapt(x_train)
搭建模型:
def build_and_compile_model(norm):
model = tf.keras.Sequential([
norm,
layers.Conv2D(128, 128, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.Flatten(),
layers.Dense(units=32, activation='relu'),
layers.Dense(units=1)
])
model.compile(loss='mean_absolute_error', optimizer=tf.keras.optimizers.Adam(0.001))
return model
当我做
dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()
我收到以下错误:
ValueError: The channel dimension of the inputs should be defined. The input_shape received is (None, None, None, None), where axis -1 (0-based) is the channel dimension, which found to be `None`.
我在这里做错了什么?
我试图从this、this、this和this中获得见解。但是,我还没有找到可行的解决方案。
我应该怎么做才能消除错误并让模型正常工作?
我将不胜感激任何帮助。
直接在归一化层定义输入形状(或添加一个
Input
层),因为它不能直接推断:
import numpy as np
import tensorflow as tf
x_train = np.random.rand(10, 128, 128, 1)
normalizer = tf.keras.layers.Normalization(input_shape=[128, 128, 1], axis=-1)
normalizer.adapt(x_train)
def build_and_compile_model(norm):
model = tf.keras.Sequential([
norm,
tf.keras.layers.Conv2D(64, 64, activation='relu'),
tf.keras.layers.Conv2D(3, 3, activation='relu'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(units=32, activation='relu'),
tf.keras.layers.Dense(units=1)
])
model.compile(loss='mean_absolute_error', optimizer=tf.keras.optimizers.Adam(0.001))
return model
dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()
此外,您的模型无法按原样工作,您在第一个
Conv2D
层中使用的内核大小为128,然后在另一个内核大小为3的Conv2D
层中使用,但您的数据具有(10, 128, 128, 1)
的形状。我更改它以使您的代码可执行。