我对张量流量相对较新,但即使经过大量研究,我也无法找到某些变量意义的文档。
对于我目前的项目,我想在tensorflow的帮助下训练DNN,之后我想从中提取权重和偏置矩阵,以便在另一个应用程序OUTSIDE tensorflow中使用它。第一次尝试时,我建立了一个带有[4,10,2]结构的简单网络,它可以预测二进制结果。
我使用了3个real_valued_columns和一个sparse_column_with_keys(包含在embedding_column中)作为功能:
def build_estimator(optimizer=None, activation_fn=tf.sigmoid):
"""Build an estimator"""
# Sparse base columns
column_stay_point = tf.contrib.layers.sparse_column_with_keys(
column_name='stay_point',
keys=['no', 'yes'])
# Continuous base columns
column_heading = tf.contrib.layers.real_valued_column('heading')
column_velocity = tf.contrib.layers.real_valued_column('velocity')
column_acceleration = tf.contrib.layers.real_valued_column('acceleration')
pedestrian_feature_columns = [column_heading,
column_velocity,
column_acceleration,
tf.contrib.layers.embedding_column(
column_stay_point,
dimension=8,
initializer=tf.truncated_normal_initializer)]
# Create classifier
estimator = tf.contrib.learn.DNNClassifier(
hidden_units=[10],
feature_columns=pedestrian_feature_columns,
model_dir='./tmp/pedestrian_model',
n_classes=2,
optimizer=optimizer,
activation_fn=activation_fn)
return estimator
我使用默认参数调用此函数,并使用estimator.fit(...)来训练DNN。除了一些关于被弃用的标量概述的警告之外。功能,它运行成功,产生了合理的结果。我使用以下行打印了模型的所有变量:
var = {k: estimator.get_variable_value(k) for k in estimator.get_variable_names())
我期望得到大小为10x4和2x10的权重矩阵以及大小为10x1和2x1的偏置矩阵。但我得到了以下内容:
'dnn/binary_logistic_head/dnn/learning_rate': 0.05 (actual value, scalar)
'dnn/input_from_feature_columns/stay_point_embedding/weights': 2x8 array
'dnn/hiddenlayer_0/weights/hiddenlayer_0/weights/part_0/Adagrad': 11x10 array
'dnn/input_from_feature_columns/stay_point_embedding/weights/int_embedding/weights/part_0/Adagrad': 2x8 array
'dnn/hiddenlayer_0/weights': 11x10 array
'dnn/logits/biases': 1x1' array
'dnn/logits/weights/nn/dnn/logits/weights/part_0/Adagrad': 10x1 array
'dnn/logits/weights': 10x1 array
'dnn/logits/biases/dnn/dnn/logits/biases/part_0/Adagrad': 1x1 array
'global_step': 5800, (actual value, scalar)
'dnn/hiddenlayer_0/biases': 1x10 array
'dnn/hiddenlayer_0/biases//hiddenlayer_0/biases/part_0/Adagrad': 1x10 array
有没有任何文件说明这些神秘的名称是什么意思,为什么矩阵有这些奇怪的尺寸?另外,为什么尽管没有指定它,仍然引用了Adagrad优化器?
非常感谢任何帮助!
答案 0 :(得分:1)
网络中的输入节点数为11而不是4 8(embedding_column)+ column_heading(1),column_velocity(1),column_acceleration(1)= 11
根据变量名称,输出是二进制逻辑节点,因此输出节点的数量只有一个,而不是2.
以下是您感兴趣的权重/偏见。
dnn / hiddenlayer_0 / weights':11x10数组 - >从输入到隐藏节点有权重
dnn / hiddenlayer_0 / biases':1x10数组 - >隐藏节点的偏差
dnn / logits / weights':10x1数组 - >从隐藏节点到输出节点的权重
dnn / logits / biases':1x1'数组 - >输出节点的偏差。
为什么引用Adagrad优化器,尽管从未指定它?
最有可能的默认优化器是AdaGrad。