Keras pesos de carga de uma rede / erro neural quando prevendo

votos
7

Eu estou usando a biblioteca Keras para criar uma rede neural. Eu tenho um Notebook ipython para carregar os dados de treinamento, inicializar a rede e encaixar os pesos da rede neural. Finalmente, guardar os pesos utilizando o método () save_weights. Código está abaixo:

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
from keras.regularizers import l2
from keras.callbacks import History

[...]

input_size = data_X.shape[1]
output_size = data_Y.shape[1]
hidden_size = 100
learning_rate = 0.01
num_epochs = 100
batch_size = 75

model = Sequential()
model.add(Dense(hidden_size, input_dim=input_size, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.2))
model.add(Dense(hidden_size))
model.add(Activation('tanh'))
model.add(Dropout(0.2))
model.add(Dense(output_size))
model.add(Activation('tanh'))

sgd = SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mse', optimizer=sgd)

model.fit(X_NN_part1, Y_NN_part1, batch_size=batch_size, nb_epoch=num_epochs, validation_data=(X_NN_part2, Y_NN_part2), callbacks=[history])

y_pred = model.predict(X_NN_part2) # works well

model.save_weights('keras_w')

Em seguida, em outro Notebook ipython, eu só quero usar estes pesos e prever alguns valores saídas dadas entradas. I inicializar a mesma rede neural, e, em seguida, carregar os pesos.

# same headers
input_size = 37
output_size = 40
hidden_size = 100

model = Sequential()
model.add(Dense(hidden_size, input_dim=input_size, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.2))
model.add(Dense(hidden_size))
model.add(Activation('tanh'))
model.add(Dropout(0.2))
model.add(Dense(output_size))
model.add(Activation('tanh'))

model.load_weights('keras_w') 
#no error until here

y_pred = model.predict(X_nn)

O problema é que, aparentemente, o método load_weights não é o suficiente para ter um modelo funcional. Estou recebendo um erro:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-17-e6d32bc0d547> in <module>()
  1 
----> 2 y_pred = model.predict(X_nn)
C:\XXXXXXX\Local\Continuum\Anaconda\lib\site-packages\keras\models.pyc in predict(self, X, batch_size, verbose)
491     def predict(self, X, batch_size=128, verbose=0):
492         X = standardize_X(X)
--> 493         return self._predict_loop(self._predict, X, batch_size, verbose)[0]
494 
495     def predict_proba(self, X, batch_size=128, verbose=1):

AttributeError: 'Sequential' object has no attribute '_predict'

Qualquer ideia? Muito obrigado.

Publicado 02/11/2015 em 07:28
fonte usuário
Em outras línguas...                            


1 respostas

votos
10

Você precisa chamar model.compile. Isso pode ser feito antes ou depois da model.load_weightschamada, mas deve ser após a arquitetura modelo é especificado e antes da model.predictchamada.

Respondeu 02/11/2015 em 07:40
fonte usuário

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