gpt4 book ai didi

tensorflow - 使用占位符值 reshape 张量

转载 作者:行者123 更新时间:2023-12-03 00:41:17 28 4
gpt4 key购买 nike

我想使用 [int, -1] 符号 reshape 张量(例如,压平图像)。但我事先并不知道第一个维度。一个用例是在大批量上进行训练,然后在较小的批量上进行评估。

为什么会出现以下错误:获取包含“_Message”类型张量的列表

import tensorflow as tf
import numpy as np

x = tf.placeholder(tf.float32, shape=[None, 28, 28])
batch_size = tf.placeholder(tf.int32)

def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])

reshaped = reshape(batch_size)


with tf.Session() as sess:
sess.run([reshaped], feed_dict={x: np.random.rand(100, 28, 28), batch_size: 100})

# Evaluate
sess.run([reshaped], feed_dict={x: np.random.rand(8, 28, 28), batch_size: 8})

注意:当我在函数外部进行 reshape 时,它似乎可以工作,但是我有多次使用的非常大的模型,因此我需要将它们保留在函数中并使用参数传递暗淡。

最佳答案

要使其工作,请替换该函数:

def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])

...具有以下功能:

def reshape(_batch_size):
return tf.reshape(x, tf.pack([_batch_size, -1]))

错误原因是 tf.reshape()需要一个可转换为 tf.Tensor 的值作为它的第二个参数。 TensorFlow 会自动将 Python 数字列表转换为 tf.Tensor,但不会自动转换数字和张量的混合列表(例如 tf.placeholder() ),而是会引发一些不直观的错误消息看到了。

tf.pack() op 接受一个可转换为张量的对象列表,并单独转换每个元素,因此它可以处理占位符和整数的组合。

关于tensorflow - 使用占位符值 reshape 张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374958/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com