最佳答案
我正试图了解 ABc0在 Keras 所扮演的角色。下面是我的代码,它是一个简单的两层网络。它接收形状(3,2)的二维数据,并输出形状(1,4)的一维数据:
model = Sequential()
model.add(Dense(16, input_shape=(3, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='SGD')
x = np.array([[[1, 2], [3, 4], [5, 6]]])
y = model.predict(x)
print y.shape
这打印出 y
有形状(1,4)。但是,如果我删除 Flatten
线,然后它打印出的 y
有形状(1,3,4)。
我不明白。根据我对神经网络的理解,model.add(Dense(16, input_shape=(3, 2)))
函数创建了一个隐藏的完全连接层,有16个节点。每个节点都连接到每个3x2输入元素。因此,第一层输出的16个节点已经是“平的”。因此,第一层的输出形状应该是(1,16)。然后,第二层将其作为输入,并输出形状(1,4)的数据。
因此,如果第一层的输出已经是“扁平的”和形状(1,16) ,为什么我需要进一步扁平它?