为什么tensorflow.map无法正常工作?

每当我运行Tf.map时,即使使用的功能与Tf.Data教程中使用的功能非常相似,也会出现错误: self._traceback = tf_stack.extract_stack()

代码:

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()
cjwannafly 回答:为什么tensorflow.map无法正常工作?

您确定问题出在tensorflow.map函数本身吗?我认为您希望映射todataset()函数中可能存在一些错误-您可以通过明确说明您希望此函数对数据集中的每个文件名做什么来提供全部帮助?

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

解决这些问题的快速方法是删除with块中的所有现有行,并将生成器行移到该块中。但是,在不知道todataset映射的预期输出或runModel中其余的意图的情况下,很难说这是否可以完成您想要的一切。

本文链接:https://www.f2er.com/3150202.html

大家都在问