我有一个Tensorflow Estimator,它以通常的方式由模型函数定义。 我想确定哪些(zscore标准化)输入对结果有意义,哪些可以消除。我更改了模型以引入两个更改:
(1)一个新的层weight_layer
,它是随机初始化的,并且元素乘以input_layer
。
weight_layer = tf.Variable(tf.random_normal([1, inputs_n], 0.5, 1))
weighted_input = tf.multiply(weight_layer, input_layer)
first_hidden_layer = tf.layers.dense(weighted_input,
int(inputs_n),
activation=tf.nn.relu,
name='dense1')
(2)惩罚sparsity
被添加到损失函数中以通过weight_layer
sparsity = tf.reduce_sum(weight_layer)
loss = tf.losses.mean_squared_error(labels, predictions) + (1000*sparsity)
当我尝试返回weight_layer
的值时,问题出现在预测时间,如下所示:
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec( mode=mode,
predictions={
"predictions": predictions,
"sparsity" : weight_layer})
我收到以下错误:
TypeError: predictions[sparsity] must be Tensor,
given: <tf.Variable 'Model/Variable:0' shape=(1, 275) dtype=float32_ref>
这看起来很奇怪,因为虽然预测[稀疏性]不是张量,但它是一个变量,并且tf.Variable文档表明我可以将tf.Variable视为正常的tf.Tensor'。
如何修复上面的内容以返回weight_layer,或者如果我有更基本的错误,请为我推荐一种方法来确定哪些输入变量很重要。
答案 0 :(得分:0)
虽然我不太了解EstimatorSpec
的动态,但似乎您试图将模型weight_layer
转换为sparsity
变量,但因为它们具有不同的形状由于tf.reduce_sum
,因此它引起了错误。