ValueError:尝试转换值张量

时间:2019-11-26 10:55:52

标签: python tensorflow

我正在尝试准备my.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.

测试数据

name,MachineAvailability,MachineEntranceLocked,MachineExitLocked,MachineMTTR,StatNumIn,StatNumOut 
XX,100,FALSE,FALSE,0,0,0
XY,100,FALSE,FALSE,0,0,0 
XX,100,FALSE,FALSE,0,2,2
XX,100,FALSE,FALSE,0,2,2

堆栈跟踪

  

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:MA <= 99,MEnL,MExL,MTTR,SNI,SNO)

     

ValueError:尝试将类型()不支持的值()转换为张量。

任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

遇到的错误是由定义数据集读取器的方式引起的。正确的定义方法是

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_default的想法是,如果某些数据已损坏(或由于某种原因而无法读取),它将被record_defaults中的内容替换。因此,将tf.Variable作为记录默认值是没有意义的,因为需要成为Tensors或只是普通的python值。您可以在official docs中阅读有关record_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)