python - 尝试在 Keras 中创建卷积神经自动编码器网络,但它不断崩溃

标签 python keras

我正在尝试使用 keras 创建一个自动编码器,我的数据形状如下: (62328, 1, 40, 40)

错误:

ValueError: Negative dimension size caused by subtracting 3 from 1 for 'conv2d/Conv2D' (op: 'Conv2D') with input shapes: [?,1,40,40], [3,3,40,4]

我不知道如何解决它。我尝试将 data_format 更改为 channels_lastchannels_first,但仍然不起作用。

请帮忙

K.set_image_data_format('channels_last')
dense_layer = 0
layer_size = 4
conv_layer = 1
IMG_SIZE = 40

NAME = "AutoEncoder-{}-conv-{}-nodes-{}-dense-{}".format(conv_layer, layer_size, dense_layer, int(time.time()))

加载数据

pickle_in = open("X5.pickle","rb")
X = pickle.load(pickle_in)
pickle_in.close()
X=np.array(X)
print( X.shape)
X= X/255

pickle_in = open("y5.pickle","rb")
y = pickle.load(pickle_in)
pickle_in.close()
y=np.array(y)

从keras中的模型开始

model = Sequential()
#encoding

这就是我的问题发生的地方

shape=[1,IMG_SIZE,IMG_SIZE]
print (shape)
model.add(Conv2D(4, (3,3),input_shape = shape))

对数据进行编码/解码

model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(2, (3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(2, (3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2))) #encoded

#decoding
model.add(UpSampling2D((2,2)))
model.add(Conv2D(2, (3,3)))
model.add(Activation('relu'))

model.add(UpSampling2D((2,2)))
model.add(Conv2D(2, (3,3)))
model.add(Activation('relu'))

model.add(UpSampling2D((2,2)))
model.add(Conv2D(4, (3,3)))
model.add(Activation('relu'))

model.add(Conv2D(1,(3,3)))
model.add(Activation('sigmoid'))
tensorboard = TensorBoard(log_dir="logs/{}".format(NAME))

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'],
              )

model.summary()

model.fit(X,X,
          batch_size=32,
          epochs=10,
          validation_split=0.3,
          callbacks=[tensorboard])
model.save("64x3-CND.model")

最佳答案

这是因为您的输入形状不正确,当 data_format 变量设置为 channels_last 时,图像的输入形状预计为 (HEIGHT, WIDTH, CHANNELS_NUM )。

data_format 更改为 channels_first 应该可以解决您的问题。

K.set_image_data_format('channels_first')

关于python - 尝试在 Keras 中创建卷积神经自动编码器网络,但它不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55726082/

相关文章:

python - 列表行为异常

python - 我的 CNN 输出层应该是什么样子?

python - 神经网络训练验证损失的解释

python - 设置等高线图颜色条的限制

python - 如何在 Win 10 上为 conda 初始化 shell?

python - Tensorflow/Keras Conv2D 层中的输入形状错误

image - 仅在cv2视频帧的ROI部分上预测模型类

android - 如何使用经过训练的 keras 模型在 Android 应用程序中进行分类

python - 将列表项转换为元组

python - 使用 Mechanize 登录