Keras中局部连接层的尺寸

时间:2018-04-10 01:55:18

标签: python keras autoencoder

我尝试使用LocallyConnected1D图层(而不是Dense)构建自动编码器,但在理解两种图层类型的差异方面遇到了很多麻烦 - 特别是在输出方面维数。

model = Sequential()
model.add(Reshape(input_shape=(input_size,), target_shape=(input_size,1))
model.add(LocallyConnected1D(encoded_size, kernel_size)
model.add(LocallyConnected1D(input_size, kernal_size_2, name="decoded_layer"))

这个模型编译得很好,但是当我去训练它时......

model.fit(x_train, x_train,
         epochs=epochs,
         batch_size=batch_size,
         shuffle=True,
         validation_data=(x_test, x_test))

其中x_trainx_test分别是形状(60000,784)和(10000,784)的numpy数组。我在这一行收到以下错误:

ValueError: Error when checking target: expected decoded_layer to have 3 dimensions, but got array with shape (60000, 784)

进入decoded_layer的张量的形状是不是(60000,encoded_size,1)?

1 个答案:

答案 0 :(得分:3)

首先,您不必将None作为input_shape中的第一个维度。 Keras自动假设存在另一个输入维度,即样本数。

其次,LocallyConnected1D需要3D输入。这意味着你的input_shape应该是(int,int)的形式,keras推断形状为(None,int,int)

一个例子:

model = Sequential()
model.add(LocallyConnected1D(64, 3, input_shape=(10,10))) #takes a 10 by 10 array for each sample
model.add(LocallyConnected1D(32, 3))

如果数据形状不正确,您可以始终使用Reshape()图层。假设你的输入是(batch_size,50)的形状,所以每个样本都是50个元素的一维向量:

model = Sequential()
model.add(Reshape(input_shape=(50,), target_shape=(50,1)) #makes array 3D
model.add(LocallyConnected1D(64, 3))
model.add(LocallyConnected1D(32, 3))