【问题标题】:How to extract weights "from input layer to hidden layer" and "from hidden layer to output layer" with Keras API?如何使用 Keras API 提取“从输入层到隐藏层”和“从隐藏层到输出层”的权重?
【发布时间】:2019-05-29 06:14:51
【问题描述】:

我是 Keras 的新手,我正在尝试在 Keras 中获得权重。我知道如何在 Python 中的 Tensorflow 中做到这一点。

代码:

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"))

有什么方法可以像在 Tensorflow 中一样获得 Keras 中的权重:

  1. 从输入层到隐藏层的权重
  2. 从隐藏层到输出层的权重

这是我在 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'))

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为答案直接在 documentation 中。
  • @desertnaut 没关系,伙计,我很感激。对不起,如果我的问题对你来说不够好。

标签: python machine-learning keras neural-network conv-neural-network


【解决方案1】:

您可以使用get_weightsset_weights 方法访问和设置模型层的权重或参数。来自Keras documentation

layer.get_weights():将层的权重作为一个列表返回 numpy 数组。 layer.set_weights(weights):设置权重 Numpy 数组列表中的层(与输出具有相同的形状 get_weights)。

每个 Keras 模型都有一个 layers 属性,它是模型中所有层的列表。例如,在您提供的示例模型中,您可以通过运行获得第一个Dense 层的权重:

model.layers[1].get_weights()

它会返回一个包含两个 numpy 数组的列表:第一个是 Dense 层的内核参数,第二个是偏置参数。

【讨论】:

  • 您好,感谢您的回复。但是我如何获得最后一层的重量? model.add(Dense(1, activation='sigmoid')).
  • @sekti92uk 只需使用layers 列表中图层的索引即可。最后一层是模型的第四层,所以它的索引是3;因此:model.layers[3].get_weights()。或者,您可以写:model.layers[-1].get_weights(),因为它也是最后一层。
猜你喜欢
  • 1970-01-01
  • 2018-08-14
  • 2013-03-28
  • 2020-03-13
  • 2018-01-25
  • 2013-11-10
  • 2021-07-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多