Keras,

2015-11-02 36 views
6

'u tahmin ederken bir sinir ağının/yükünün ağırlığını yükler Bir sinir ağı oluşturmak için Keras kütüphanesini kullanıyorum. Eğitim verilerini yüklemek, ağı başlatmak ve sinir ağının ağırlığını "uydurmak" için bir iPython Defterim var. Son olarak, save_weights() yöntemini kullanarak ağırlıkları kaydediyorum. Kod aşağıdaki gibidir:Keras,

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') 

Sonra, başka ipython Notebook içinde, sadece girişler verilen bazı çıkışlar değerleri bu ağırlıkları kullanmak ve tahmin etmek istiyorum. Aynı sinir ağını başlatıyorum ve daha sonra ağırlıkları yükleyin.

# 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) 

sorun

görünüşe göre, load_weights yöntem işlevsel bir modelini için yeterli olmamasıdır. Hata alıyorum:

--------------------------------------------------------------------------- 
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' 

Herhangi bir fikir? Çok teşekkürler.

cevap

9

model.compile numaralı telefonu aramanız gerekir. Bu, model.load_weights çağrısından önce veya sonra yapılabilir, ancak model mimarisi belirtildikten sonra ve model.predict çağrısından önce olmalıdır.

+0

Teşekkürler. İşe yaradı :) – Julian

İlgili konular