python - Tensorflow:FailedPreconditionError:表未初始化(使用 tf.data.Dataset API)
问题描述
我将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)]]
知道为什么我的查找表仍未初始化/如何解决这个问题吗?
谢谢!
解决方案
嗨,这很奇怪,也许以下工作示例会对您有所帮助:
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)
希望对你有帮助 !
推荐阅读
- google-closure-compiler - 如何为 Google Closure Compiler 网页版设置参数?
- javascript - 如何在 Angular 4 中禁用 FormArray 中的 FormControl
- spring-boot - 如何将 Jconsole(Jdk/bin) 与 SpringBoot 应用程序集成以管理动态记录器配置
- r - 使用 R/Plotly 更改热图的 y 轴刻度值
- php - 尝试使用 php 准备好的语句和 mysqli 执行更新/插入查询,但无济于事
- excel - cyber-duck/laravel-excel 文件损坏/格式无效
- python - Python 将 x,y 数据转换为纬度和经度数据
- java - 无法使用 Eclipse 导出产品
- jquery - 在ajax中引用锚标记
- impala - 无法使用 impala-shell 在 kudu 中创建表