5

下面的代码工作得很好。如果我尝试将所有 64 更改为 128,那么我会收到有关形状的错误。如果在使用 Keras 时更改人工神经网络中的层数,是否需要更改输入数据形状?我不这么认为,因为它要求 input_dim 是正确的。

作品:

model = Sequential()
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(Activation('softmax'))

sgd3 = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd3)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)

不工作:

model = Sequential()
model.add(Dense(128, input_dim=14, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(128, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(128, init='uniform'))
model.add(Activation('softmax'))

sgd3 = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd3)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)
4

2 回答 2

3

您可以在同一输入上为每个隐藏层使用不同数量的隐藏层和不同数量的单元/神经元。

除了最后一个之外,每个Dense都可以看作是一个隐藏层。最后Dense一个输出的数量应该等于您想要的输出维度(在您的情况下,维度y似乎是 64)。

尝试这个:

model = Sequential()
model.add(Dense(128, input_dim=14, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(128, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(Activation('softmax'))

sgd3 = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd3)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)
于 2016-01-19T14:01:00.340 回答
1

您根本不会更改代码片段之间的层数。你改变的是单位的数量。

Dense(64) 是具有 64 个隐藏单元的全连接层。由于它是完全连接的,因此您的输入单元的数量也会更改为该数量,因此也会更改对输入的要求。

于 2016-01-18T10:20:37.137 回答