簡體   English   中英

估算器API:AttributeError:'NoneType'對象沒有屬性'dtype'

[英]Estimator API: AttributeError: 'NoneType' object has no attribute 'dtype'

我已經查找了以前對該問題的答案,但尚未解決。 我正在從頭開始實現YOLO算法(用於對象檢測),並且在訓練部分遇到了問題。

為了進行培訓,我使用tf.estimator API,並使用類似於Tensorflow 示例中的 CNN MNIST代碼的代碼。 我收到以下錯誤:

Traceback (most recent call last):
  File "recover_v3.py", line 663, in <module>
    model.train(input_fn=train_input_fn, steps=1)
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 376, in train
    loss = self._train_model(input_fn, hooks, saving_listeners)
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 1145, in _train_model
    return self._train_model_default(input_fn, hooks, saving_listeners)
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 1170, in _train_model_default
    features, labels, model_fn_lib.ModeKeys.TRAIN, self.config)
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 1133, in _call_model_fn
    model_fn_results = self._model_fn(features=features, **kwargs)
  File "recover_v3.py", line 584, in cnn_model_fn
    loss=loss, global_step=tf.train.get_global_step())
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/training/optimizer.py", line 400, in minimize
    grad_loss=grad_loss)
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/training/optimizer.py", line 494, in compute_gradients
    self._assert_valid_dtypes([loss])
  File "/home/nyu-mmvc-019/miniconda3/envs/tf_0/lib/python3.6/site-packages/tensorflow/python/training/optimizer.py", line 872, in _assert_valid_dtypes
    dtype = t.dtype.base_dtype
AttributeError: 'NoneType' object has no attribute 'dtype'

主文件中與損失函數有關的代碼如下所示(類似於CNN MNIST官方示例):

if mode == tf.estimator.ModeKeys.TRAIN:
    # This gives the LOSS for each image in the batch.
    # It is importing loss function from another file (called loss_fn)
    # Apparently it returns None (not sure)
    loss = loss_fn.loss_fn(logits, labels)

    optimizer = tf.train.AdamOptimizer(learning_rate=params["learning_rate"])

    train_op = optimizer.minimize(
        loss=loss, global_step=tf.train.get_global_step())

    # Wrap all of this in an EstimatorSpec.
    spec = tf.estimator.EstimatorSpec(
        mode=mode,
        loss=loss,
        train_op=train_op,
        eval_metric_ops=None)

    return spec

先前對類似問題的回答表明,損失函數未返回任何結果。 但是,當我嘗試使用隨機生成的數組進行損失函數時,它可以正常工作並產生正常值。

另外,如果我從損失函數返回一個類似10.0的常數,我仍然會遇到相同的錯誤。

我不確定現在如何進行。 另外,有什么方法可以打印損失函數返回的損失。 顯然,tf.estimator API本身會啟動一個tensorflow會話,並且如果我嘗試創建另一個會話(以打印損失函數返回的值),則會遇到其他錯誤。

但是,當我嘗試使用隨機生成的數組進行損失函數時,它可以正常工作並產生正常值。

看來您的input_fn有問題。 您確定正確實施了嗎?

另外,有什么方法可以打印損失函數返回的損失。

估計器每隔global_step%'save_summary_steps'自動在控制台中打印損失函數的值。 您還可以使用標量摘要來跟蹤損失函數,如下所示:

tf.summary.scalar('loss', loss)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM