Python ValueError:尝试转换值张量

Python ValueError:尝试转换值张量,python,tensorflow,Python,Tensorflow,我正在准备我的.CSV文件,以便深入学习。目前,我正在尝试从CSV文件读取数据。但我犯了一个无法理解的错误 import tensorflow as tf tf.enable_eager_execution() csv_path = "/Users/dean/Desktop/AI TECNOMATIX EXCEL/cartest1.csv" def DESAI_map(name, platform, year): return {'MachineAvailability': MA,

我正在准备我的.CSV文件,以便深入学习。目前,我正在尝试从CSV文件读取数据。但我犯了一个无法理解的错误

import tensorflow as tf

tf.enable_eager_execution()

csv_path = "/Users/dean/Desktop/AI TECNOMATIX EXCEL/cartest1.csv"

def DESAI_map(name, platform, year):
    return {'MachineAvailability': MA, "MachineEntranceLocked": MEnL, "MachineExitLocked": MExL, "MachineMTTR": MTTR, "StatNumIn": SNI, "StatNumOut": SNO}

DESAI_dataset = tf.data.experimental.CsvDataset(
    filenames=csv_path,
    record_defaults=[tf.Variable,tf.string, tf.string, tf.Variable,tf.Variable,tf.Variable([1900], dtype=tf.int32)],
    select_cols=[1, 2, 3,4,5,6],
    field_delim=",",
    header=True)

DESAI_dataset = DESAI_dataset.filter(lambda MA:MA<=99, MEnL, MExL,MTTR,SNI,SNO)
DESAI_dataset = DESAI_dataset.map(map_func=DESAI_map)
DESAI_dataset = DESAI_dataset.batch(1)

for data in DESAI_dataset:
    tf.print(data)  # Print : {'Name': [Wii Sports], 'Platform': [Wii], 'Year': [2006]}
    break



ValueError: Attempt to convert a value (<class 'tensorflow.python.ops.variables.VariableV1'>) with an unsupported type (<class 'tensorflow.python.ops.variables.VariableMetaclass'>) to a Tensor.
堆栈跟踪
ValueError Traceback(最近一次调用last)在13个select_cols=[1,2,3,4,5,6],14 field_delim=“,”,-->15 header=True)16 17 DESAI_dataset=DESAI_dataset.filter(lambda MA:MA您遇到的错误是由您定义数据集读取器的方式引起的。正确的定义方式是

DESAI_dataset = tf.data.experimental.CsvDataset(
    filenames=csv_path,
    record_defaults=[0,"False", "False", 0, 0, 0],
    select_cols=[1, 2, 3,4,5,6],
    field_delim=",",
    header=True)
记录默认值的想法是,如果某些数据损坏(或由于某种原因无法读取)它将被
record\u defaults
中的内容所取代。因此,将
tf.Variable
作为记录默认值是没有意义的,因为需要是
Tensors
或只是简单的python值。您可以在中了解
record\u defaults
所接受的内容

现在,我注释掉了以下几行,因为您没有共享一些变量(例如MA、MEnL等)。但我会根据需要更新我的答案

DESAI_dataset = DESAI_dataset.filter(lambda MA:MA<=99, MEnL, MExL,MTTR,SNI,SNO)
DESAI_dataset = DESAI_dataset.map(map_func=DESAI_map)

DESAI_dataset=DESAI_dataset.filter(lambda MA:MA)如果您可以共享示例数据集以及完整堆栈跟踪,将非常有用。---------------------------------------------------------------------------------------ValueError Traceback(最后一次调用)在13个select_cols=[1,2,3,4,5,6],14 field_delim=“,”,-->15 header=True)16 17 DESAI_dataset=DESAI_dataset.filter(lambda MA:MASample of data setname machine可用性MachineEntranceLocked machineexitclocked machinemtr StatNumIn StatNumOut XX 100 FALSE 0 0 0 XY 100 FALSE 0 0 0 0 XX 100 FALSE 0 2 XX 100 FALSE 0 2如果您可以将数据发布到问题本身中,则会更清晰(具有适当的结构-因此任何人都可以粘贴数据并重现问题。)。谢谢您的评论。我只有以下问题。在记录默认值中,False是否被视为布尔值,因为我有一些输出为True,一些输出为False?0是默认值还是基于数据输入的可变变量?正如我所解释的,
记录默认值
是常量。它将替换任何不可读的条目因此,简短的回答是,不可以。您不能根据数据更改它,因为记录默认值的全部目的是在您无法读取数据时提供帮助。
DESAI_dataset = DESAI_dataset.filter(lambda MA:MA<=99, MEnL, MExL,MTTR,SNI,SNO)
DESAI_dataset = DESAI_dataset.map(map_func=DESAI_map)