tutorial - redes neuronales python pdf
Keras carga pesos de una red neuronal/error al predecir (1)
model.compile
llamar a model.compile
. Esto se puede hacer antes o después de la llamada model.load_weights
pero debe realizarse después de que se especifique la arquitectura del modelo y antes de la llamada model.predict
.
Estoy usando la biblioteca Keras para crear una red neuronal. Tengo un iPython Notebook para cargar los datos de entrenamiento, inicializar la red y "ajustar" los pesos de la red neuronal. Finalmente, guardo los pesos usando el método save_weights (). El código está abajo:
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'')
Luego, en otro portátil iPython, solo quiero usar estos pesos y predecir algunos valores de salida dadas las entradas. Inicializo la misma red neuronal y luego cargo los 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)
El problema es que aparentemente, el método load_weights no es suficiente para tener un modelo funcional. Me aparece un error:
---------------------------------------------------------------------------
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''
¿Alguna idea? Muchas gracias.