Keras 中局部连接层的维度
Dimensions of locally connected layers in Keras
我正在尝试使用 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_train
和 x_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)?
首先,您不必将 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))
我正在尝试使用 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_train
和 x_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)?
首先,您不必将 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))