2017-02-23 69 views
5

Я запускаю простую сеть пересылки с использованием Keras. Имея только один скрытый слой, я хотел бы сделать некоторые выводы относительно релевантности каждого ввода для каждого вывода, и я хотел бы извлечь вес.Как извлечь весы смещения в последовательную модель Keras?

Это модель:

def build_model(input_dim, output_dim): 
    n_output_layer_1 = 150 
    n_output = output_dim 
    model = Sequential() 
    model.add(Dense(n_output_layer_1, input_dim=input_dim, activation='relu')) 
    model.add(Dropout(0.25)) 
    model.add(Dense(n_output)) 

Чтобы извлечь вес, который я написал:

for layer in model.layers: 
    weights = layer.get_weights() 


weights = np.array(weights[0])  #this is hidden to output 
first = model.layers[0].get_weights() #input to hidden 
first = np.array(first[0]) 

К сожалению, я не получаю смещает столбцов в матрицах, которые я знаю Keras автоматически вставляет Это.

Знаете ли вы, как получить весы смещения?

Заранее благодарю вас за помощь!

ответ

10

get_weights() для плотного слоя возвращает список из двух элементов, первый элемент содержит веса, а второй элемент содержит предубеждения. Таким образом, вы можете просто сделать:

weights = model.layers[0].get_weights()[0] 
biases = model.layers[0].get_weights()[1] 

Обратите внимание, что веса и предубеждения уже являются массивными массивами.

+0

Спасибо, Матиас, не заметил этого! –

+0

Извините за беспокойство, какая функция активации имеет выход в моей модели? Есть ли выбор по умолчанию или это просто взвешенная сумма активации скрытых нейронов? –