【问题标题】:Tensorflow: FailedPreconditionError: Table not initialized (using tf.data.Dataset API)Tensorflow:FailedPreconditionError:表未初始化(使用 tf.data.Dataset API)
【发布时间】:2019-03-31 11:32:22
【问题描述】:

我将tf.data.Dataset API 与tf.contrib.lookup.index_table_from_tensor 结合使用。

我的数据集是这样创建的:

dataset = tf.data.Dataset.from_tensor_slices(({'reviews': x}, y)))

这就是我正在做的事情:

data_table = tf.contrib.lookup.index_table_from_tensor(tf.constant(data_vocab))
labels_table = tf.contrib.lookup.index_table_from_tensor(tf.constant(labels_vocab))

然后我在我的dataset 上映射一个预处理函数:

def preprocess(x, y):
    # split on whitespace
    x['reviews'] = tf.string_split([x['reviews']])
    # turn into integers
    return data_table.lookup(x['reviews']), labels_table.lookup(y)

到目前为止一切顺利。但是,当我尝试将我的数据集传递给我的 Keras 模型进行训练时,我得到:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.

我四处搜索,人们建议我需要包括:

sess = tf.Session()
sess.run(tf.tables_initializer())

但现在我明白了:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.
     [[Node: hash_table_Lookup = LookupTableFindV2[Tin=DT_STRING, Tout=DT_INT64](hash_table_lookup_placeholder, StringSplit:1, hash_table_lookup_placeholder_1)]]
     [[Node: IteratorGetNext_1 = IteratorGetNext[output_shapes=[[?,?], [?,20]], output_types=[DT_INT64, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](Iterator_1)]]

知道为什么我的查找表仍然没有初始化/如何解决这个问题?

谢谢!

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    您好,这很奇怪,也许以下工作示例会对您有所帮助:

    x = ['this is aswesome', 'i dont like it', 'i love it', 'i hate it']
    y = ['positive','negative','positive','negative']
    data_vocab = list({word for sentence in x for word in sentence.split(' ')})
    label_vocab = list(set(y))
    
    dataset = tf.data.Dataset.from_tensor_slices(({'reviews': x}, y))
    
    data_table=tf.contrib.lookup.index_table_from_tensor(tf.constant(data_vocab))
    labels_table = tf.contrib.lookup.index_table_from_tensor(tf.constant(label_vocab))
    
    def preprocess(x, y):
        # split on whitespace
        x['reviews'] = tf.string_split([x['reviews']])
        # turn into integers
        return data_table.lookup(x['reviews']), labels_table.lookup(y)
    
    preprocessed = dataset.map(preprocess)
    
    it = preprocessed.make_initializable_iterator()
    sess = tf.Session()
    sess.run(it.initializer)
    sess.run(tf.tables_initializer()) 
    

    如果你打电话给sess.run(it.get_next())你会得到(SparseTensorValue(indices=array([[0, 0], [0, 1], [0, 2]]), values=array([2, 7, 4]), dense_shape=array([1, 3])), 1)

    希望对你有帮助!

    【讨论】:

    • 感谢您的帮助!我不应该只用sess.run(tf.tables_initializer()) 初始化表,然后将dataset 传递给我的Keras 模型吗?一旦我调用 model.fit(...) 就会发生错误。另外,我不应该初始化我的数据集来获得一个 Keras 模型来训练它,我不认为
    • 通常你可以传递你的数据集,我想知道你如何处理你的会话?你确定你使用的是同一个会话吗?
    • 我只是运行 sess = tf.Session() sess.run(tf.tables_initializer()) ,构建我的 Keras 模型,然后在数据集上调用 .fit
    • 在拟合模型之前,您可以尝试添加此行tf.keras.backend.set_session(sess)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2011-06-05
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多