Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在tensorflow中使用带估计器的衰减学习率?_Tensorflow - Fatal编程技术网

如何在tensorflow中使用带估计器的衰减学习率?

如何在tensorflow中使用带估计器的衰减学习率?,tensorflow,Tensorflow,我正在尝试使用一个线性分类器和一个学习率不断下降的梯度去中心化器 我的代码: def main(): # load data features = np.load('data/feature_data.npz') tx = features['arr_0'] y = features['arr_1'] ## Prepare logistic regression n_point, n_feat = tx.shape # Input functions

我正在尝试使用一个线性分类器和一个学习率不断下降的梯度去中心化器

我的代码:

def main():
# load data
    features = np.load('data/feature_data.npz')
    tx = features['arr_0']
    y = features['arr_1']

## Prepare logistic regression
    n_point, n_feat = tx.shape

# Input functions
    def get_input_fn_from_numpy(tx, y, num_epochs=None, shuffle=True):
    # Preprocess data
        return tf.estimator.inputs.numpy_input_fn(
        x={"x":tx},
        y=y,
        num_epochs=num_epochs,
        shuffle=shuffle,
        batch_size=128
        )

    cols_label = "x"
    feature_cols = [tf.contrib.layers.real_valued_column(cols_label)]

    my_input_fn_train = get_input_fn_from_numpy(tx, y)

    model_dir = 'data/tmp/' + datetime.datetime.now().strftime("%m-%d_%H:%M:%S")
    global_step = tf.Variable(0, trainable=False)
    learning_rate=tf.train.exponential_decay(0.001*np.ones((20,1), dtype=np.float32), global_step, 10000, 0.95, staircase=False)
    regressor = tf.contrib.learn.LinearClassifier(feature_columns=feature_cols,
                                              model_dir=model_dir,
                                                  optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate))

    regressor.fit(input_fn=get_input_fn_from_numpy(tx_train, y_train), steps=100000)
    results = regressor.evaluate(input_fn=my_input_fn_test)
我得到一个错误:

  File "training.py", line 71, in <module>
main()
  File "training.py", line 63, in main
regressor.fit(input_fn=get_input_fn_from_numpy(tx_train, y_train), steps=100000)
  File "/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 296, in new_func
return func(*args, **kwargs)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 458, in fit
loss = self._train_model(input_fn=input_fn, hooks=hooks)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 958, in _train_model
model_fn_ops = self._get_train_ops(features, labels)
 File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 1165, in _get_train_ops
return self._call_model_fn(features, labels, model_fn_lib.ModeKeys.TRAIN)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 1136, in _call_model_fn
model_fn_results = self._model_fn(features, labels, **kwargs)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/linear.py", line 186, in _linear_model_fn
logits=logits)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py", line 854, in create_model_fn_ops
enable_centered_bias=self._enable_centered_bias)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py", line 649, in _create_model_fn_ops
batch_size, loss_fn, weight_tensor)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py", line 1911, in _train_op
train_op = train_op_fn(loss)
  File "/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/linear.py", line 179, in _train_op_fn
zip(grads, my_vars), global_step=global_step))
  File "/lib/python3.6/site-packages/tensorflow/python/training/optimizer.py", line 456, in apply_gradients
update_ops.append(processor.update_op(self, grad))
  File "/lib/python3.6/site-packages/tensorflow/python/training/optimizer.py", line 97, in update_op
return optimizer._apply_dense(g, self._v)  # pylint: disable=protected-access
  File "/lib/python3.6/site-packages/tensorflow/python/training/gradient_descent.py", line 50, in _apply_dense
use_locking=self._use_locking).op
  File "/lib/python3.6/site-packages/tensorflow/python/training/gen_training_ops.py", line 370, in apply_gradient_descent
name=name)
  File "/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 330, in apply_op
g = ops._get_graph_from_inputs(_Flatten(keywords.values()))
  File "/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 4262, in _get_graph_from_inputs
_assert_same_graph(original_graph_element, graph_element)
  File "/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 4201, in _assert_same_graph
"%s must be from the same graph as %s." % (item, original_item))
ValueError: Tensor("ExponentialDecay:0", shape=(20, 1), dtype=float32) must be from the same graph as Tensor("linear/x/weight/part_0:0", shape=(20, 1), dtype=float32_ref).
我使用的是tensorflow 1.3。 如果我用一个常数来代替学习速率,比如说0.01,它就会起作用。在过去,我使用了衰减的学习率和最小化操作相结合,但试图在LinearClassifier中使用它。 我发现有些东西似乎不一致,因为我没有将全局步骤与fit中的步骤联系起来,但我想知道这是如何工作的。我想我可以按照建议使用占位符,但我不明白如果不需要,为什么我应该自己编写更新规则

关于如何解决这个问题有什么建议吗?

您是否尝试通过调用tf.train.get\u global\u步骤来获得全局步骤?这将返回LinearClassifier模型使用的全局_步骤

而不是

global_step = tf.Variable(0, trainable=False)
使用


这对我使用自己的估计器类很有效,我使用tf.train.MomentumOptimizer将tf.nn.sparse\u softmax\u cross\u entropy\u与\u logits最小化。

我无法让它工作,至少在急切模式下是如此。根据,创建全局_步骤将提供静态张量,而不会在运行时更新。您是否需要做一些特殊的事情,您能否确认LR随着时间的推移发生了变化?
global_step = tf.train.get_global_step()