1. ホーム
  2. tensorflow

[解決済み] Kerasでモデルウェイトを保存する:モデルウェイトとは?

2022-03-01 06:04:01

質問

Kerasで画像認識用のディープラーニングモデルを作成し、モデル重みの保存を model.save_weights('weights.h5') . また、それをロードして再び重みを使用しました。

を知っている model.save_weights() は、モデルの重みを保存します。質問ですが、モデルの重みとは何でしょうか?フィルターの重みでしょうか?

どのように解決するのですか?

モデルの重みとは、モデルのすべてのパラメータ(学習可能なものと学習不可能なものを含む)であり、ひいてはモデルの各層で使用されるすべてのパラメータとなります。そして、コンボリューション層では、フィルタ重みとバイアスがそれにあたります。

実際には、各レイヤーで見ることができます。 model.layers[layer_index].get_weights() と入力すると、そのレイヤーの重みが表示されます。を呼び出すと、そのレイヤーの重みが表示されます。 save_weights() の出力である。 get_weights() は、ファイルに格納されている各レイヤー上で呼び出されます。

例えば畳み込みレイヤーの場合。 get_weights() メソッドは、フィルタの重みとバイアスに対応する2つの要素からなるリストを返します。以下はその例です。

model = Sequential()
model.add(Conv2D(5, (3,3), input_shape=(100, 100, 3)))

filters, biases = model.layers[0].get_weights()

>>> filters.shape
(3, 3, 3, 5)  <--- 5 filters of shape (3, 3, 3)

>>> biases.shape
(5,)    <--- one bias parameter for each filter

>>> filters[:, :, :, 0]   # get the first filter's weights
array([[[-0.26788074, -0.20213448,  0.06233829],
    [ 0.08651951,  0.21303588,  0.08127764],
    [ 0.04672694, -0.24589485, -0.12873489]],

   [[ 0.10841686,  0.24839908, -0.07466605],
    [-0.26903206, -0.0341135 ,  0.15083215],
    [-0.07382561, -0.00576964, -0.25354072]],

   [[-0.02937067,  0.22315139, -0.12964793],
    [ 0.23371089,  0.19973844, -0.00728002],
    [-0.2748396 , -0.02097657,  0.22772402]]], dtype=float32)