Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有来自tf.dynamic_分区的可变大小项的数据集_Python_Tensorflow_Tensorflow Datasets - Fatal编程技术网

Python 具有来自tf.dynamic_分区的可变大小项的数据集

Python 具有来自tf.dynamic_分区的可变大小项的数据集,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,类似于,我想从一个列表中构建一个包含不同大小的元素的列表。但是,与链接问题不同,我想从的输出生成数据集,它输出张量列表 我的设置: import tensorflow as tf D = tf.data.Dataset # shorthand notation x = tf.range(9) # Array to be partitioned p = tf.constant([1,0,2,0,0,0,2,2,1]) # Defines partitions 因此,数据集应该有三个元素,分别包

类似于,我想从一个列表中构建一个包含不同大小的元素的列表。但是,与链接问题不同,我想从的输出生成数据集,它输出张量列表

我的设置:

import tensorflow as tf
D = tf.data.Dataset # shorthand notation

x = tf.range(9) # Array to be partitioned
p = tf.constant([1,0,2,0,0,0,2,2,1]) # Defines partitions
因此,数据集应该有三个元素,分别包含
[1 3 4 5]
[0 8]
[2 6 7]

正如预期的那样,直接方法失败了:

dataset = D.from_tensor_slices(tf.dynamic_partition(x,p,3))
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:
    nl = sess.run(next_element)
tensorflow.python.framework.errors\u impl.InvalidArgumentError:形状 所有输入的值必须匹配:值[0]。形状=[4]!=值[1]。形状= [2]

下一步我尝试的是应用,应用:

tensorflow.python.framework.errors\u impl.InvalidArgumentError: exceptions.ValueError:使用序列设置数组元素


如何从
tf.dynamic_partition
的输出中创建具有可变大小项的数据集

来自\u生成器的
不起作用,因为它期望生成器函数生成numpy数组而不是张量

解决问题的一种方法是为分区的每个元素创建一个数据集。在本例中,您将数据划分为3个组,因此您将创建3个数据集,并将它们与以下数据集组合:

x=tf.range(9)#要分区的数组
p=tf。常数([1,0,2,0,0,0,2,2,1])#定义分区
分区=tf.动态分区(x,p,3)
dataset=tf.data.dataset.from_张量(分区[0])
对于范围(1,3)内的i:
dataset_bis=tf.data.dataset.from_张量(分区[i])
dataset=dataset.concatenate(dataset_bis)
iterator=dataset.make_one_shot_iterator()
下一个元素=迭代器。获取下一个元素()
使用tf.Session()作为sess:
对于范围(3)中的i:
nl=sess.run(下一个元素)
打印(nl)

这很有效!稍微有点离题,但我想说的是,如果对
连接的调用超过几个,那么这似乎会严重减慢速度。我尝试将第一个循环的范围增加到
range(1,20)
,并与
dataset\u bis=tf.data.dataset.from\u张量(分区[I%3])
连接。那么,数据的传输速度确实非常非常慢。取决于你有多少个分区,可能是可行的或不可行的。@mikkola:是的,我想这真的取决于你项目的细节。对于您的数据集,可能有更好的解决方案。
dataset = D.from_generator(lambda: tf.dynamic_partition(x,p,3), tf.int32, output_shapes=[None])
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:
    nl = sess.run(next_element)