, 必须是字符串或张量,python,tensorflow,tensorflow2.0"/>

首页 > 解决方案 > TensorFlow Type Error 无效类型, 必须是字符串或张量

问题描述

我正在尝试建立一个简单的增强决策树并使用测试数据运行。我有类似的东西在另一台机器上工作,但是当移植代码时我得到这个错误: TypeError: Fetch argument 0 has invalid type <class 'numpy.int64'>, must be a string or Tensor. (Can not convert a int64 into a Tensor or Operation.)根据阅读,这个错误通常会导致重新分配一个关键变量,但我很难弄清楚它可能是什么。

这是我的代码(对不起,如果它有点乱,我尽可能地把它浓缩了)

import pandas as pd
import tensorflow as tf
tf.random.set_seed(123)
from sklearn.datasets import make_blobs


#creates an input function for a tf model
def make_input_fn(X, Y, n_epochs=None, shuffle=True):
    batch_len = len(Y)
    def input_fn():
        dataset = tf.data.Dataset.from_tensor_slices((dict(X), Y))
        if shuffle:
            dataset = dataset.shuffle(batch_len)
        # For training, cycle thru dataset as many times as need (n_epochs=None).
        dataset = dataset.repeat(n_epochs)
        #dividing data into batches
        dataset = dataset.batch(batch_len)
        return dataset
    return input_fn


def fullTest():
    print('_______Defining Test Data Blobs_______')
    xVals, yVals = make_blobs(n_samples=10, centers=2, n_features=3, random_state=0)
    
    #xVals
    xVals = pd.DataFrame(xVals)
    xVals.columns = ['feature {}'.format(num) for num in xVals.columns]
    print('xVals:')
    print(xVals)

    #yVals
    yVals = pd.DataFrame(yVals)
    yVals.columns = ['flag']
    print('yVals:')
    print(yVals['flag'].value_counts())

    # Defining input function
    train_input_fn = make_input_fn(xVals, yVals)

    trainX=xVals
    trainY=yVals

    #defining tf feature columns
    feature_columns=[]
    for feature_name in list(trainX.columns):
        feature_columns.append(tf.feature_column.numeric_column(feature_name,dtype=tf.float32))

    #creating the estimator
    n_batches = 1
    est = tf.estimator.BoostedTreesClassifier(feature_columns, n_batches_per_layer=n_batches)

    est.train(train_input_fn, max_steps=250) 

if __name__ == '__main__':
    fullTest()

有很多错误打印输出。这是更相关的东西:

...\site-packages\tensorflow\python\framework\ops.py", line 3759, in _as_graph_element_locked
    (type(obj).__name__, types_str))
TypeError: Can not convert a int64 into a Tensor or Operation.

During handling of the above exception, another exception occurred:

line 309, in __init__
    (fetch, type(fetch), str(e)))
TypeError: Fetch argument 0 has invalid type <class 'numpy.int64'>, must be a string or Tensor. (Can not convert a int64 into a Tensor or Operation.)

完整追溯:

Traceback (most recent call last):
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\client\session.py", line 305, in __init__
    fetch, allow_tensor=True, allow_operation=True))
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\framework\ops.py", line 3667, in as_graph_element
    return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\framework\ops.py", line 3759, in _as_graph_element_locked
    (type(obj).__name__, types_str))
TypeError: Can not convert a int64 into a Tensor or Operation.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Daniel Warfield\AppData\Local\Programs\Python\Python35\Lib\site-packages\Ok2StandLibrary\ok2stand_library\modeling\modeling_tools.py", line 127, in <module>
    fullTest()
  File "C:\Users\Daniel Warfield\AppData\Local\Programs\Python\Python35\Lib\site-packages\Ok2StandLibrary\ok2stand_library\modeling\modeling_tools.py", line 105, in fullTest
    est.train(train_input_fn, max_steps=250) 
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 349, in train
    loss = self._train_model(input_fn, hooks, saving_listeners)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1175, in _train_model
    return self._train_model_default(input_fn, hooks, saving_listeners)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1208, in _train_model_default
    saving_listeners)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1507, in _train_with_estimator_spec
    log_step_count_steps=log_step_count_steps) as mon_sess:
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\monitored_session.py", line 604, in MonitoredTrainingSession
    stop_grace_period_secs=stop_grace_period_secs)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\monitored_session.py", line 1038, in __init__
    stop_grace_period_secs=stop_grace_period_secs)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\monitored_session.py", line 749, in __init__
    self._sess = _RecoverableSession(self._coordinated_creator)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\monitored_session.py", line 1231, in __init__
    _WrappedSession.__init__(self, self._create_session())
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\monitored_session.py", line 1236, in _create_session
    return self._sess_creator.create_session()
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\monitored_session.py", line 909, in create_session
    hook.after_create_session(self.tf_sess, self.coord)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py", line 587, in after_create_session
    self._save(session, global_step)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py", line 620, in _save
    write_meta_graph=self._save_graph_def)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\saver.py", line 1158, in save
    global_step = training_util.global_step(sess, global_step)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\training\training_util.py", line 68, in global_step
    return int(sess.run(global_step_tensor))
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\client\session.py", line 958, in run
    run_metadata_ptr)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\client\session.py", line 1166, in _run
    self._graph, fetches, feed_dict_tensor, feed_handles=feed_handles)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\client\session.py", line 477, in __init__
    self._fetch_mapper = _FetchMapper.for_fetch(fetches)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\client\session.py", line 276, in for_fetch
    return _ElementFetchMapper(fetches, contraction_fn)
  File "D:\Documents\Contracting\Yang\Ok2StandUp\Environments\ok2suGen\lib\site-packages\tensorflow\python\client\session.py", line 309, in __init__
    (fetch, type(fetch), str(e)))
TypeError: Fetch argument 0 has invalid type <class 'numpy.int64'>, must be a string or Tensor. (Can not convert a int64 into a Tensor or Operation.)

版本信息(GPU 加速也不起作用,但只要这不是问题的根源,就不用担心):

2020-08-31 20:29:14.209013: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-08-31 20:29:14.209649: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
Python Version: 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 16:05:27) [MSC v.1900 64 bit (AMD64)]
tf version: 2.3.0

标签: pythontensorflowtensorflow2.0

解决方案


推荐阅读