Como você alterar o número de unidades em uma camada ao usar Keras?

votos
4

O código abaixo funciona perfeitamente bem. Se eu tentar mudar todas as 64s a 128s então eu recebo um erro sobre a forma. Eu preciso mudar a forma de dados de entrada se eu mudar o número de camadas em uma rede neural artificial ao usar Keras? Eu não penso assim, porque ele pede para input_dim que é correto.

Trabalho:

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)

não funciona:

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)
Publicado 11/01/2016 em 05:58
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Você não muda o número de camadas em tudo em entre o código-trechos. O que você muda é o número de unidades.

Densa (64) é uma camada completamente ligada com 64 unidades ocultos. Uma vez que está totalmente conectado, o número de suas unidades de entrada também muda a esse número, e, portanto, também os requisitos para as entradas.

Respondeu 18/01/2016 em 08:20
fonte usuário

votos
2

Você pode usar um número diferente de camadas ocultas e um número diferente de unidades / neurônios para cada um deles na mesma entrada.

Cada Denseexceto o último pode ser visto como uma camada oculta. O último Densedeve ter um número de saídas igual à sua dimensão saída desejada (no seu caso a dimensão yparece ser 64).

Tente isto:

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)
Respondeu 19/01/2016 em 12:01
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more