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

时间:2016-01-11 07:58:49

标签: python neural-network keras data-science

以下代码完全正常。如果我尝试将所有64s更改为128s,那么我会收到有关形状的错误。如果在使用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)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

密集(64)是一个完全连接的层,有64个隐藏单元。由于它是完全连接的,因此输入单元的数量也会更改为该数字,因此也会改变输入的要求。