hus*_*ani 7 python deep-learning keras tensorflow
我不断收到与输入形状相关的错误。任何帮助将不胜感激。谢谢!
import tensorflow as tf
(xtrain, ytrain), (xtest, ytest) = tf.keras.datasets.mnist.load_data()
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(16, kernel_size=3, activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Conv2D(32, kernel_size=3, activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics='accuracy')
history = model.fit(xtrain, ytrain,
validation_data=(xtest, ytest),
epochs=10, batch_size=8)
Run Code Online (Sandbox Code Playgroud)
ValueError:层序的输入 0 与层不兼容::预期 min_ndim=4,发现 ndim=3。收到的完整形状:[8, 28, 28]
Nic*_*ais 14
您需要添加通道维度。Keras 期望这种数据格式:
(n_samples, height, width, channels)
Run Code Online (Sandbox Code Playgroud)
例如,如果您的图像是灰度图像,则它们有 1 个通道,因此需要以这种格式将它们提供给 Keras:
(60000, 28, 28, 1)
Run Code Online (Sandbox Code Playgroud)
不幸的是,灰度图片通常会在没有通道维度的情况下给出/下载,例如在 中tf.keras.datasets.mnist.load_data,这将是(60000, 28, 28),这是有问题的。
您可以使用tf.expand_dims添加维度
xtrain = tf.expand_dims(xtrain, axis=-1)
Run Code Online (Sandbox Code Playgroud)
现在您的输入形状将是:
(60000, 28, 28, 1)
Run Code Online (Sandbox Code Playgroud)
还有其他替代方案可以执行相同的操作:
xtrain = xtrain[..., np.newaxis]
xtrain = xtrain[..., None]
xtrain = xtrain.reshape(-1, 28, 28, 1)
xtrain = tf.reshape(xtrain, (-1, 28, 28, 1))
xtrain = np.expand_dims(xtrain, axis=-1)
Run Code Online (Sandbox Code Playgroud)
小智 11
您创建的模型的输入层需要使用 4 维张量,但您传递给它的 x_train 张量只有 3 维
这意味着您必须使用 .reshape(n_images, 286, 384, 1) 重塑您的训练集。现在,您已在不更改数据的情况下添加了额外的维度,并且您的模型已准备好运行。
在训练模型之前,您需要将 x_train 张量重塑为 4 维。例如:
x_train = x_train.reshape(-1, 28, 28, 1)
Run Code Online (Sandbox Code Playgroud)
有关 keras 输入的更多信息,请查看此答案
| 归档时间: |
|
| 查看次数: |
20859 次 |
| 最近记录: |