我尝试在单个GPU上使用Tensorflow数据集API生成自己的图像数据集来测量推理性能
resolutions = [
(2048, 1080)
]
def generate_image(size, channels):
image_value = random.random()
image_shape = [1, size[1], size[0], channels]
return tf.constant(
value=image_value,
shape=image_shape,
dtype=tf.float32)
def generate_single_input(size):
source = generate_image(size, 3)
target = generate_image(size, 3)
return source, target
def input_generator_fn():
for res in resolutions:
for i in range(10):
yield generate_single_input(res)
def benchmark():
...
ds = tf.data.dataset.from_generator(
generator=input_generator_fn,
output_types=(tf.float32, tf.float32),
output_shapes=(tf.TensorShape([1, 1080, 2048, 3]),
tf.TensorShape([1, 1080, 2048, 3])))
iterator = ds.make_one_shot_iterator()
next_record = iterator.get_next()
inputs = next_record[0]
outputs = next_record[1]
predictions = {
'input_images': inputs
'output_images': outputs
}
session = tf.Session()
with session:
tf.global_variables_initializer()
for res in resolutions:
for i in range(10):
session.run(predictions)
.....
但我在运行后观察到以下异常:
^{pr2}$
你知道了吗?在
我遇到了完全相同类型的问题,我的问题是生成器和输入到输出形状中的尺寸不匹配。在
再看看你的代码,我相信你必须输入有效的数据,比如numpy数组,而不是TensorFlow常量。在
简而言之,这是因为从_生成器可以展平NumPy数组而不是张量。在
下面是一个较短的代码,将重现错误:
版本1.14中的错误消息非常有用。(确切的代码行会因版本不同而改变,但我已经检查了1.12和1.13,原因是一样的。)
^{pr2}$当生成的元素是张量时,from_generator将把它展平为
output_types
。转换功能不起作用。在要解决这个问题,只需在生成器生成张量时不要使用
from_generator
。您可以使用from_tensors
或from_tensor_slices
。在相关问题 更多 >
编程相关推荐