【发布时间】:2021-10-06 20:53:56
【问题描述】:
我在tensorflow2(见下文)中创建了以下卷积自动编码器:
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras import layers
image_height=480
image_width=640
class Autoencoder(Model):
def __init__(self):
super(Autoencoder, self).__init__()
self.encoder = tf.keras.Sequential([
layers.InputLayer(input_shape=(image_height, image_width, 1), name="layer1"),
layers.Conv2D(16, (3, 3), activation='relu', name="layer2"),
layers.MaxPooling2D(pool_size=(2, 2), name="layer3"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer4"),
layers.MaxPooling2D(pool_size=(2, 2), name="layer5"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer6"),
layers.MaxPooling2D(pool_size=(2, 2), name="layer7"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer8"),
layers.MaxPooling2D(pool_size=(2, 2), name="layer9"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer10"),
layers.MaxPooling2D(pool_size=(2, 2), name="layer11"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer12")
])
self.decoder = tf.keras.Sequential([
layers.UpSampling2D(size=(2,2), name="layer13"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer14"),
layers.UpSampling2D(size=(2,2), name="layer15"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer16"),
layers.UpSampling2D(size=(2,2), name="layer17"),
layers.Conv2D(8, (3, 3), activation='relu', name="layer18"),
layers.UpSampling2D(size=(2,2), name="layer19"),
layers.Conv2D(16, (3, 3), activation='relu', name="layer20"),
layers.UpSampling2D(size=(2,2), name="layer21"),
layers.Conv2D(1, (3, 3), activation='relu', name="layer22")
])
self._model = Model()
def call(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return decoded
我还将图像数据划分为两个单独的数据集:
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
'path/to/imagedir',
validation_split=0.2,
label_mode=None,
subset="training",
seed=123,
image_size=(image_height,image_width),
color_mode="grayscale"
)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
'path/to/imagedir',
validation_split=0.2,
label_mode=None,
subset="validation",
seed=123,
image_size=(image_height,image_width),
color_mode="grayscale"
)
创建自动编码器并编译后:
autoencoder = Autoencoder()
autoencoder.compile(loss='binary_crossentropy')
我想训练它:
autoencoder.fit(train_ds, train_ds, epochs=10, validation_data=(val_ds,val_ds))
很遗憾,我收到以下错误:
raise ValueError("`y` argument is not supported when using "
ValueError: `y` argument is not supported when using dataset as input.
问题是当 x 参数也是一个数据集时,拟合函数无法接收作为 y 参数的数据集。我也无法将图像保存为张量列表,因为我的数据集太大。
【问题讨论】:
标签: tensorflow conv-neural-network tensorflow-datasets autoencoder