Keras: CNNのフィルターをみる時
CNNのフィルターの中身をみる方法
一次元データの時
from tensorflow.keras.layers import Input, Dense, Conv1D, Flatten, Reshape from tensorflow.keras.models import Model n_filter = 10 inputs = Input(shape=(64,)) hidden = Reshape((64, 1))(inputs) hidden = Conv1D(n_filter, kernel_size, strides=strides, padding='valid', activation="relu", name="cnn")(hidden) hidden = Flatten()(hidden) outputs = Dense(1, activation="sigmoid")(hidden) model = Model(inputs=inputs, outputs=outputs) # model compile model.compile(optimizer='adam', loss='binary_crossentropy', metrics="accuracy") # training history = model.fit(X_train, y_train, epochs=20, batch_size=32, validation_data=(X_val, y_val), verbose=1)
でモデルを作ったらcnn
と名前をつけているlayerについて見れば良い。
filters = model.get_layer("cnn")
でlayer着目して
filters.weights
にweightが格納されている.
filters.weights[0]
はfilterでfilters.weights[1]
はbias。
1次元の時には
filters.weights[0][:, :, i]
でi番目のfilterが見れる。
まとめると、
# filter show for i in range(n_filter): tmp = sess.run(filters.weights[0][:, :, i]) print(i, "filter is", tmp)
2次元の時
2次元のfilterの時も、weights[0]の最後の次元がfilterの番号になっていることに注意すれば良い。