python - 如何使用 Keras API 提取“从输入层到隐藏层”和“从隐藏层到输出层”的权重?
问题描述
我是 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 中的权重:
- 输入层到隐藏层的权重
- 隐藏层到输出层的权重
这是我在 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'))
解决方案
get_weights
您可以使用和方法访问和设置模型层的权重或参数set_weights
。来自Keras 文档:
layer.get_weights()
:将层的权重作为 Numpy 数组的列表返回。layer.set_weights(weights)
: 从 Numpy 数组列表中设置层的权重(与 的输出具有相同的形状get_weights
)。
每个 Keras 模型都有一个layers
属性,它是模型中所有层的列表。例如,在您提供的示例模型中,您可以Dense
通过运行以下命令获取第一层的权重:
model.layers[1].get_weights()
它将返回两个 numpy 数组的列表:第一个是密集层的内核参数,第二个数组是偏置参数。
推荐阅读
- c# - 如何从 MSTest 对站点进行灯塔审计
- r - 查找 hexbin 对象之间重叠的六边形 bin 的坐标
- java - QueryDSL谓词绑定多个路径之间的“或”
- php - SMTP 功能不工作,执行时间超过
- batch-file - 如何将文件移动到另一个目录,如果存在相同的文件名,用 old_filename 重命名旧文件
- javascript - 如何在 x 动作后触发 var
- git - 获取从远程分支到本地孤立分支的完整提交历史记录
- r - 匹配R中字符串中的单个字符
- javascript - 如何根据对窗口确认()方法的回答在不同的 window.locations 之间切换
- react-native - 跟踪来自 Facebook 和 Instagram 的应用下载