使用tensorflow的tf.contrib.learn.DNNClassifier提取神经网络权重

时间:2017-07-04 13:46:38

标签: tensorflow neural-network

有没有办法从Tensorflow的tf.contrib.learn.DNNClassifier中提取权重矩阵?我已经尝试查找Tensorflow网站以获得答案,但我对此很新,所以到目前为止我还没有找到任何有用的信息。提前抱歉,如果此处已有明确的解释,我无法找到。

我的代码:

# read the csv file to numpy array
df = tf.contrib.learn.datasets.base.load_csv_with_header(
      filename="data.csv",
      target_dtype=np.int,
      features_dtype=np.float64)

X = df.data
Y = df.target
dimension = len(X)

feature_columns = [tf.contrib.layers.real_valued_column("", dimension=dimension)]

classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
                                                      hidden_units=[10,10],
                                                      n_classes=2,
                                                      activation_fn=tf.nn.sigmoid,
                                                      optimizer=tf.train.ProximalAdagradOptimizer(
                                                        learning_rate=0.1,
                                                        l2_regularization_strength=0.001))

#Fit model
classifier.fit(x=X, y=Y, steps=2000)

1 个答案:

答案 0 :(得分:3)

经过一番研究后,我想我已经找到了答案:

classifier.get_variable_value(classifier.get_variable_names()[3])   

classifier.get_variable_names()打印名称列表

['dnn/binary_logistic_head/dnn/learning_rate', 
'dnn/hiddenlayer_0/biases', 
'dnn/hiddenlayer_0/biases//hiddenlayer_0/biases/part_0/Adagrad',
'dnn/hiddenlayer_0/weights',
'dnn/hiddenlayer_0/weights/hiddenlayer_0/weights/part_0/Adagrad', 
'dnn/logits/biases', 
'dnn/logits/biases/dnn/dnn/logits/biases/part_0/Adagrad', 
'dnn/logits/weights', 
'dnn/logits/weights/nn/dnn/logits/weights/part_0/Adagrad',
'global_step']

classifier.get_variable_names()[3]得到第四个,即第一层的权重。在这种情况下,分类器有一个隐藏层,有10个神经元。

第7个' dnn / logits / weights'给出输出层的权重。