使用 Keras 时如何更改层中的单元数?

How do you change the number of units in a layer when using Keras?

下面的代码工作得很好。如果我尝试将所有 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)

您根本没有更改 code-snippets 之间的层数。 您更改的是单位数。

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

您可以在同一输入上对每个隐藏层使用不同数量的隐藏层和不同数量的 units/neurons。

除最后一个外,每个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)