我是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.1epoch = 10000# https://www.tensorflow.org/api_docs/python/tf/metricsvalidation_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 monitorvalidation_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数组的列表:第一个是Dense层的内核参数,第二个数组是偏置参数。