কেরাসের কোনও HDF5 ফাইল থেকে কোনও মডেল লোড করবেন কীভাবে?


94

কেরাসের কোনও HDF5 ফাইল থেকে কোনও মডেল লোড করবেন কীভাবে?

আমি যা চেষ্টা করেছি:

model = Sequential()

model.add(Dense(64, input_dim=14, init='uniform'))
model.add(LeakyReLU(alpha=0.3))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Dropout(0.5))

model.add(Dense(64, init='uniform'))
model.add(LeakyReLU(alpha=0.3))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Dropout(0.5))

model.add(Dense(2, init='uniform'))
model.add(Activation('softmax'))


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

checkpointer = ModelCheckpoint(filepath="/weights.hdf5", verbose=1, save_best_only=True)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2, callbacks=[checkpointer])

উপরের কোডটি সাফল্যের সাথে ওয়েটস.এইচডিএফ 5 নামের একটি ফাইলের সেরা মডেলটিকে সংরক্ষণ করে। আমি যা করতে চাই তা হল সেই মডেলটি লোড করা। নীচের কোডটি দেখায় যে আমি কীভাবে চেষ্টা করেছি:

model2 = Sequential()
model2.load_weights("/Users/Desktop/SquareSpace/weights.hdf5")

এই ত্রুটিটি আমি পেয়েছি:

IndexError                                Traceback (most recent call last)
<ipython-input-101-ec968f9e95c5> in <module>()
      1 model2 = Sequential()
----> 2 model2.load_weights("/Users/Desktop/SquareSpace/weights.hdf5")

/Applications/anaconda/lib/python2.7/site-packages/keras/models.pyc in load_weights(self, filepath)
    582             g = f['layer_{}'.format(k)]
    583             weights = [g['param_{}'.format(p)] for p in range(g.attrs['nb_params'])]
--> 584             self.layers[k].set_weights(weights)
    585         f.close()
    586 

IndexError: list index out of range

উত্তর:


84

load_weightsশুধুমাত্র আপনার নেটওয়ার্কের ওজন নির্ধারণ করে। কল করার আগে আপনাকে এর আর্কিটেকচারটি নির্ধারণ করতে হবে load_weights:

def create_model():
   model = Sequential()
   model.add(Dense(64, input_dim=14, init='uniform'))
   model.add(LeakyReLU(alpha=0.3))
   model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
   model.add(Dropout(0.5)) 
   model.add(Dense(64, init='uniform'))
   model.add(LeakyReLU(alpha=0.3))
   model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
   model.add(Dropout(0.5))
   model.add(Dense(2, init='uniform'))
   model.add(Activation('softmax'))
   return model

def train():
   model = create_model()
   sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
   model.compile(loss='binary_crossentropy', optimizer=sgd)

   checkpointer = ModelCheckpoint(filepath="/tmp/weights.hdf5", verbose=1, save_best_only=True)
   model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose=2, callbacks=[checkpointer])

def load_trained_model(weights_path):
   model = create_model()
   model.load_weights(weights_path)

37
আপনি যদি পুরো মডেলটি লোড করতে চান, কেবল from keras.models import load_modelmodel = load_model('model.h5')
ওজনগুলিই নয়

4
@ মিকায়েল, আপনি কি আমাকে এই এসও পোস্টের সাথে একটি টিপস দিতে পারেন? stackoverflow.com/questions/55050339/...
HenryHub

207

আপনি যদি এইচডিএফ 5 ফাইলে কেবলমাত্র ওজনই নয়, সম্পূর্ণ মডেলটি সঞ্চয় করেন তবে এটি যতটা সহজ

from keras.models import load_model
model = load_model('model.h5')

কোনও মডেল মডেলের মেমরির পদচিহ্ন গণনা করার সময় প্রকৃত প্রশিক্ষণের ডেটাও অন্তর্ভুক্ত করে? আপনার উপলব্ধ স্মৃতির চেয়ে বড় মডেলটি আপনি কীভাবে লোড করতে পারেন?
ব্যবহারকারী 798719

কোনও মডেল প্রশিক্ষণ ডেটা (স্পষ্টভাবে) অন্তর্ভুক্ত করে না। আপনি আপনার উপলব্ধ মেমরির চেয়ে বড় কোনও মডেলটি লোড করতে পারবেন না (ভাল, ঠিক আছে, এটি সম্ভব তবে এটি বেশ কঠিন এবং আপনার নিজেরাই এটি চালিয়ে যেতে হবে ... তবে যদি আপনার মডেল আপনাকে ভারী করে তুলতে খুব বড় হয় তবে (ক) আরও স্মৃতি পাওয়া উচিত বা (খ) একটি ছোট মডেলকে প্রশিক্ষণ দেওয়া)
মার্টিন থোমা

@ মার্টিনথোমা আমি আপনার প্রস্তাবিত পদ্ধতিটি ব্যবহার করছি। আমি বোঝা মডেল থেকে একটি স্তর বের করার চেষ্টা encoder = autoencoder.layers[0] encoder.get_weights() করছি এবং এর FailedPreconditionError: Attempting to use uninitialized value lstm_1/kernel
ওজনগুলি

4
আমি প্রশংসা প্রশংসা করি :-) গৃহীত উত্তরের জন্য একটি বক্তব্য রাখতে: আমি ভাবতে পারি যে কেবলমাত্র ওজন সংরক্ষণ করা আরও মজবুত। যদি কেরাস পরিবর্তন হয় তবে ওজনগুলি এখনও আমদানি করা যায় যখন সম্পূর্ণ জিনিসটি আমদানি করা যায় না। অন্যদিকে, কেউ পুরানো সংস্করণ ইনস্টল করতে পারে, ওজন ডাম্প করতে পারেন এবং আগের মতোই করতে পারেন।
মার্টিন থোমা

@ pr338 দয়া করে আপনার গৃহীত উত্তর আপডেট করার বিষয়ে বিবেচনা করুন।
ক্রিস

28

একটি বেসিক কেরাস নিউরাল নেট মডেল কীভাবে তৈরি করবেন, মডেল (জেএসএন) এবং ওজনগুলি (এইচডিএফ 5) সংরক্ষণ করুন এবং সেগুলি লোড করুন সে সম্পর্কে নিম্নলিখিত নমুনা কোডটি দেখুন:

# create model
model = Sequential()
model.add(Dense(X.shape[1], input_dim=X.shape[1], activation='relu')) #Input Layer
model.add(Dense(X.shape[1], activation='relu')) #Hidden Layer
model.add(Dense(output_dim, activation='softmax')) #Output Layer

# Compile & Fit model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X,Y,nb_epoch=5,batch_size=100,verbose=1)    

# serialize model to JSON
model_json = model.to_json()
with open("Data/model.json", "w") as json_file:
    json_file.write(simplejson.dumps(simplejson.loads(model_json), indent=4))

# serialize weights to HDF5
model.save_weights("Data/model.h5")
print("Saved model to disk")

# load json and create model
json_file = open('Data/model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

# load weights into new model
loaded_model.load_weights("Data/model.h5")
print("Loaded model from disk")

# evaluate loaded model on test data 
# Define X_test & Y_test data first
loaded_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
score = loaded_model.evaluate(X_test, Y_test, verbose=0)
print ("%s: %.2f%%" % (loaded_model.metrics_names[1], score[1]*100))

4
এটি আমার জন্য জেসন এবং এইচ 5 থেকে একটি মডেল লোড করার জন্য কাজ করেছিল। আপনি যদি @ ইনহিরটেডজিকের উদাহরণ ব্যবহার করেন তবে মডেল ডটকম (ফাইল) মনে আছে কিনা তা নিশ্চিত করুন। আপনি মডেল.ভ্যালুয়েট কল করার আগে এটি প্রয়োজন। দুর্দান্ত উদাহরণ, ধন্যবাদ!
কোডগুইরোস

6

অফিসিয়াল ডকুমেন্টেশন অনুসারে https://keras.io/getting-started/faq/#how-can-i-install-hdf5-or-h5py-to-save-my-models-in-keras

আপনি করতে পারেন :

প্রথমটি পরীক্ষা করে চালিয়ে আপনি যদি এইচ 5 পিস ইনস্টল করে থাকেন

import h5py

h5py আমদানির সময় আপনার যদি ত্রুটি না থাকে তবে আপনি সংরক্ষণ করতে ভাল:

from keras.models import load_model

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
del model  # deletes the existing model

# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')

আপনার যদি h5py http://docs.h5py.org/en/latest/build.html ইনস্টল করতে হয়


4
এটি h5py 2.9.0 এর সাথে কেরাস 2.2.4 এ কাজ করবে বলে মনে হচ্ছে না। আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: অ্যানাকোন্ডা 3 \ এনভিএসস \ সিন্থেটিক \ lib \ সাইট-প্যাকেজগুলি \ কেরাস \ ইউটিস \ io_utils.py ", লাইন 302, গেটাইটেমে ভ্যালুইরিয়ারে ('কেবল পঠন মোডে গ্রুপ তৈরি করতে পারে না)')
সিস্টেল

0

আমি এইভাবে করেছি

from keras.models import Sequential
from keras_contrib.losses import import crf_loss
from keras_contrib.metrics import crf_viterbi_accuracy

# To save model
model.save('my_model_01.hdf5')

# To load the model
custom_objects={'CRF': CRF,'crf_loss': crf_loss,'crf_viterbi_accuracy':crf_viterbi_accuracy}

# To load a persisted model that uses the CRF layer 
model1 = load_model("/home/abc/my_model_01.hdf5", custom_objects = custom_objects)

কোনও মডেল নেই ave সেভ ()। কেবলমাত্র মডেল.মোডেল.সেভ () রয়েছে। এবং এই মডেলটি আবার লোড করা এবং এটি তৈরির মূল মডেল পদ্ধতিতে ব্যবহার করা ত্রুটির দিকে পরিচালিত করে। ভারযুক্ত বস্তুটি হ'ল <কেরাস.েনজিন.সেকুয়েনশিয়াল e প্রয়োজনীয়তা যখন আমরা তৈরি করি তেমনি কেরাস.ওয়ারাপার্স ciসেকিট_লার্ন K কেরাসআগ্রিজার। আমি কীভাবে এটি পরিবর্তন করতে পারি?
বালু

আমি নীচের সাইটটি আমার সমস্যা সমাধান করেছি [ github.com/keras-team/keras-contrib/blob/master/keras_contrib/…
ত্রিনাধ নাগুবাডি

আমি এই লিঙ্কটিতে একটি 404 পেয়েছি
বালু


@ ত্রিনাধ নাগুবাডি, লিঙ্কটি আপডেট করুন দয়া করে পৃষ্ঠাটি আর বিদ্যমান নেই।
ক্যাটালিনা চিরচু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.