Tensorflow tf.contrib.learn.DNNClassifier'的含义和维度;s提取的权重和偏差
我对tensorflow比较陌生,但即使进行了大量研究,我也无法找到关于某些变量含义的文档 对于我当前的项目,我想在tensorflow的帮助下训练DNN,然后我想从中提取权重和偏差矩阵,以便在tensorflow之外的另一个应用程序中使用它。在第一次尝试中,我建立了一个具有[4,10,2]结构的简单网络,它预测一个二进制结果 我使用了3个实值列和一个带有键的稀疏列作为特征:Tensorflow tf.contrib.learn.DNNClassifier'的含义和维度;s提取的权重和偏差,tensorflow,Tensorflow,我对tensorflow比较陌生,但即使进行了大量研究,我也无法找到关于某些变量含义的文档 对于我当前的项目,我想在tensorflow的帮助下训练DNN,然后我想从中提取权重和偏差矩阵,以便在tensorflow之外的另一个应用程序中使用它。在第一次尝试中,我建立了一个具有[4,10,2]结构的简单网络,它预测一个二进制结果 我使用了3个实值列和一个带有键的稀疏列作为特征: def build_estimator(optimizer=None, activation_fn=tf.sigmoid
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。除了一些关于不推荐使用的“scalar_summary”函数的警告外,它成功运行并产生了合理的结果。我使用以下行打印了模型的所有变量:
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优化器,但仍有对它的引用
非常感谢您的帮助 网络中的输入节点数是11,而不是4 8(嵌入列)+列标题(1),列速度(1),列加速度(1)=11 根据变量名,输出是一个二进制逻辑节点,因此输出节点的数量只有一个而不是两个 以下是您感兴趣的权重/偏差 dnn/hiddenlayer_0/weights':11x10数组-->存在从输入到隐藏节点的权重 dnn/hiddenlayer_0/偏差:1x10数组-->隐藏节点的偏差 dnn/logits/weights':10x1数组-->从隐藏节点到输出节点的权重 dnn/logits/biases:输出节点的1x1数组-->偏差 为什么在从未指定Adagrad优化器的情况下仍会引用它?
最有可能的默认优化器是AdaGrad。谢谢!我意识到我在嵌入列中设置了dimension=8。这就解决了我的奇数维问题。