keras中提取每一層的系數
建立一個keras模型
import keras
from keras.models import Model
from keras.layers import Input, Dense
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPool2D
from keras.layers.normalization import BatchNormalization
import numpy as np
mnist_input = Input(shape=(28, 28, 1), name='input')
conv1 = Conv2D(128, kernel_size=4, activation='relu', name='conv1')(mnist_input)
bn1 = BatchNormalization()(conv1)
pool1 = MaxPool2D(pool_size=(2, 2), name='pool1')(bn1)
conv2 = Conv2D(64, kernel_size=4, activation='relu', name='conv2')(pool1)
bn2 = BatchNormalization()(conv2)
pool2 = MaxPool2D(pool_size=(2, 2), name='pool2')(bn2)
hidden1 = Dense(64, activation='relu', name='hidden1')(pool2)
output = Dense(10, activation='softmax', name='output')(hidden1)
model = Model(inputs=mnist_input, outputs=output)
print(model.summary())
返回所有層的權重系數,並保存成numpy array
weights = np.array(model.get_weights())
print(weights[0].shape)
for i in model.get_weights():
print(i.shape)
得到具體某一層的權重系數
對於BN層,layer.get_weights()返回一個list,為[gamma, beta, mean, std]四個array, 見stackoverflow
對於卷積層和全連接層,layer.get_weights()返回一個list,為[weight, bias]兩個array
for j in model.layers: # 得到所有層的名稱
print(j.name)
print(model.get_layer('batch_normalization_1').get_weights()) # 根據層的名稱索引到具體的層,然后得到權重系數