简体   繁体   English

如何使用Keras API提取“从输入层到隐藏层”和“从隐藏层到输出层”的权重?

[英]How to extract weights “from input layer to hidden layer” and “from hidden layer to output layer” with Keras API?

I am new to Keras and I am trying to get the weights in Keras. 我是Keras的新手,我正努力了解Keras的重要性。 I know how to do it in Tensorflow in Python. 我知道如何在Python的Tensorflow中做到这一点。

Code: 码:

data = np.array(attributes, 'int64')
target = np.array(labels, 'int64')

feature_columns = [tf.contrib.layers.real_valued_column("", dimension=2, dtype=tf.float32)]
learningRate = 0.1
epoch = 10000

# https://www.tensorflow.org/api_docs/python/tf/metrics
validation_metrics = {
"accuracy": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_accuracy ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES),
"precision": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_precision ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES),
"recall": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_recall ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES),
"mean_absolute_error": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_mean_absolute_error ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES),
"false_negatives": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_false_negatives ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES),
"false_positives": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_false_positives ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES),
"true_positives": tf.contrib.learn.MetricSpec(metric_fn = tf.contrib.metrics.streaming_true_positives ,
prediction_key = tf.contrib.learn.PredictionKey.CLASSES)
}

# validation monitor
validation_monitor = tf.contrib.learn.monitors.ValidationMonitor(data, target, every_n_steps=500,
metrics = validation_metrics)

classifier = tf.contrib.learn.DNNClassifier(
feature_columns = feature_columns,
hidden_units = [3],
activation_fn = tf.nn.sigmoid,
optimizer = tf.train.GradientDescentOptimizer(learningRate),
model_dir = "model",
config = tf.contrib.learn.RunConfig(save_checkpoints_secs = 1)
)

classifier.fit(data, target, steps = epoch,
monitors = [validation_monitor])

# print('Params:', classifier.get_variable_names())
'''
Params: ['dnn/binary_logistic_head/dnn/learning_rate', 'dnn/hiddenlayer_0/biases', 'dnn/hiddenlayer_0/weights', 'dnn/logits/biases', 'dnn/logits/weights', 'global_step']
'''

print('total steps:', classifier.get_variable_value("global_step"))
print('weight from input layer to hidden layer: ', classifier.get_variable_value("dnn/hiddenlayer_0/weights"))
print('weight from hidden layer to output layer: ', classifier.get_variable_value("dnn/logits/weights"))

Is there any way to obtain the weights in Keras like in Tensorflow: 有没有办法像Tensorflow中那样获得Keras中的权重:

  1. The weights from input layer to hidden layer 从输入层到隐藏层的权重
  2. The weights from hidden layer to output layer 从隐藏层到输出层的权重

This is my model in Keras: 这是我在Keras中的模型:

model = Sequential()
model.add(Flatten(input_shape=(224,224,3)))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

You can access and set the weights or parameters of the model's layers using get_weights and set_weights methods. 您可以使用get_weightsset_weights方法访问和设置模型图层的权重或参数。 From Keras documentation : Keras文档中

layer.get_weights() : returns the weights of the layer as a list of Numpy arrays. layer.get_weights() :以Numpy数组列表的形式返回图层的权重。 layer.set_weights(weights) : sets the weights of the layer from a list of Numpy arrays (with the same shapes as the output of get_weights ). layer.set_weights(weights) :从Numpy数组列表中设置图层的权重(形状与get_weights的输出get_weights )。

Each Keras model has a layers attribute which is the list of all the layers in the model. 每个Keras模型都有一个layers属性,该属性是模型中所有图层的列表。 For example, in the sample model you provided, you can get the weights of the first Dense layer by running: 例如,在您提供的样本模型中,可以通过运行以下命令来获取第一个Dense层的权重:

model.layers[1].get_weights()

It would return a list of two numpy arrays: the first one is the kernel parameters of the Dense layer the second array is the bias parameters. 它会返回两个numpy数组的列表:第一个是Dense层的内核参数,第二个数组是bias参数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM