Python 为什么tensorflow.map不能正常工作?

Python 为什么tensorflow.map不能正常工作?,python,tensorflow,Python,Tensorflow,每当我运行Tf.map时,即使使用与Tf.Data教程中使用的函数非常相似的函数,我也会得到一个错误: self.\u traceback=tf\u stack.extract\u stack() 代码: 您确定问题出在tensorflow.map函数本身吗?我认为您希望映射的todataset()函数中可能存在一些错误--您能通过澄清此函数对数据集中的每个文件名所做的操作来帮助我们吗 您似乎尝试使用tf.compat.v1.Session()将中数据集中第一个文件的名称打印为Session:上

每当我运行Tf.map时,即使使用与Tf.Data教程中使用的函数非常相似的函数,我也会得到一个错误: self.\u traceback=tf\u stack.extract\u stack()

代码:


您确定问题出在tensorflow.map函数本身吗?我认为您希望映射的
todataset()
函数中可能存在一些错误--您能通过澄清此函数对数据集中的每个文件名所做的操作来帮助我们吗

您似乎尝试使用tf.compat.v1.Session()将
中数据集中第一个文件的名称打印为Session:
上下文块。我认为这会导致代码出现两个潜在错误。首先,在退出上下文之前不必手动关闭会话,因为当您离开上下文时,python将自动尝试关闭会话。与此相关的是,您尝试在上下文之外(在对生成器的调用中)再次使用相同的
session
变量,而该变量不再定义。第二个是覆盖
file=file.eval(session=session)
行中
file
张量的值;在该行之后,
file
的值(大概)是glob中与
filelist
数据集匹配的字符串。但是,当您将
file.eval()传递给生成器时,将再次内联调用它。但是,python字符串没有
.eval()
方法

这些问题的快速解决方法是删除
with
块中的所有现有行,并将生成器行移到块中。然而,在不知道
todataset
映射的预期输出或
runModel
中的其他意图的情况下,很难说这是否能满足您的要求

import numpy as np
import glob
data = "*data\\*training\\*\\*"
filelist = tf.data.Dataset.list_files(str(data))

classes = ('item0','item1','item2', 'item3')
def generator(file):
    f = tf.io.read_file(file)
    f = tf.image.decode_jpeg(f)
    f = tf.image.rgb_to_grayscale(tf.image.resize(f, size = [28,28, 3]))
    l = file.split('\\')
    l = l[2]
    l_label = classes.index(l)
    r1 = tf.constant(l_label)
    r2 = f
    return r1, r2 

def runModel():
    dataset = filelist.map(todataset)

def todataset(file):
    with tf.compat.v1.Session() as session:
        file = file.eval(session=session)
        print("I got here" + file)
        session.close()
    push_to_array1, push_to_array2 = generator(file.eval(session=session))
    return(push_to_array2, push_to_array1)


runModel()