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

pr3*_*338 5 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)
Run Code Online (Sandbox Code Playgroud)

不起作用:

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)
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 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)
Run Code Online (Sandbox Code Playgroud)