2 回答
TA贡献1784条经验 获得超7个赞
您需要batch在数据集上设置大小,以便它返回多个示例,而不仅仅是一个。这也会将维度数更改为 4。
import tensorflow as tf
import numpy as np
inp = np.random.rand(100, 128, 128, 3)
# *** Had to set the last dim below to 1 to avoid another error with the accuracy
out = np.random.rand(100, 126, 126, 1)
model = tf.keras.Sequential(
[
tf.keras.layers.InputLayer(input_shape=(128, 128, 3)),
tf.keras.layers.Conv2D(
filters=32, kernel_size=3, strides=(2, 2), activation='relu'),
tf.keras.layers.Conv2DTranspose(
filters=3,
kernel_size=3,
strides=(2, 2),
padding="SAME",
activation='relu'),
]
)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
train_dataset = tf.data.Dataset.from_tensor_slices((inp, out))
# *** Setting batch size of 10 below
train_dataset = train_dataset.batch(10)
model_history = model.fit(train_dataset, epochs=10)
注意:我必须更改out张量的最后一个维度以避免出现不同的错误:
ValueError: Can not squeeze dim[3], expected a dimension of 1, got 3 for 'metrics/accuracy/Squeeze' (op: 'Squeeze') with input shapes: [?,126,126,3]
TA贡献1993条经验 获得超5个赞
我假设您有 100 张尺寸为 128x128 的图像,它们是 3 通道(RGB)。而且您的网络无法一次获取所有图像。它应该一步获得一张图像。所以你有2个选择:
使用 for 循环遍历数据集,从数据集中获取一张图像输入和一张输出图像
使用批处理。告诉您网络您将使用批次:
tf.keras.layers.InputLayer(input_shape=(None, 128, 128, 3))
-输入占位符中的 Tensorflow 批次大小
添加回答
举报