Làm thế nào để lưu giữ lại ma trận trọng số sau khi train xong và dùng để load lại để predict?

  1. Trí tuệ nhân tạo

Làm thế nào để lưu giữ lại ma trận trọng số sau khi train xong và dùng để load lại để predict?

Từ khóa: 

trí tuệ nhân tạo

Ví dụ khi tạo mô hình Deep learning bằng Lasagne ta cần lưu lại bộ trọng số sau khi huấn luyện, sau đó gọi bộ trọng số đó ra cho quá trình gán nhãn dữ liệu mới:

#training ...

# build model

bi_lstm_cnn_crf = ...

# save parameter

numpy.savez('models/weights', *lasagne.layers.get_all_param_values(bi_lstm_cnn_crf))

#predict...

# load parameter

with numpy.load('models/weights.npz') as f:

   param_values = [f['arr_%d' % i] for i in range(len(f.files))]

lasagne.layers.set_all_param_values(bi_lstm_cnn_crf, param_values)

Trả lời

Ví dụ khi tạo mô hình Deep learning bằng Lasagne ta cần lưu lại bộ trọng số sau khi huấn luyện, sau đó gọi bộ trọng số đó ra cho quá trình gán nhãn dữ liệu mới:

#training ...

# build model

bi_lstm_cnn_crf = ...

# save parameter

numpy.savez('models/weights', *lasagne.layers.get_all_param_values(bi_lstm_cnn_crf))

#predict...

# load parameter

with numpy.load('models/weights.npz') as f:

   param_values = [f['arr_%d' % i] for i in range(len(f.files))]

lasagne.layers.set_all_param_values(bi_lstm_cnn_crf, param_values)

Nếu bạn đang tự viết NN của riêng mình, thì hầu hết các ngôn ngữ đều có hàm để serialize/deserialize một object. Ví dụ, trong Python có pickle(), Matlab có save(), Java có ObjectOutputStream, ...

Nếu bạn đang sử dụng một thư viện, thì khả năng lớn tính năng này cũng được hỗ trợ sẵn. Ví dụ, Keras có save()/load_model(), Tensorflow có tf.train.Saver(), ...

Edit:

https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model

https://www.tensorflow.org/programmers_guide/saved_model