批量加料张量流图中形状变化的原因

2024-10-02 18:14:47 发布

您现在位置:Python中文网/ 问答频道 /正文

图形需要成批处理,输入形状定义为(None,60,80,19)(None,60,80,38)。你知道吗

TensorFlow图定义如下:

def __init__(self, tf_config=None):
     self.tensor_heatMat = tf.placeholder(
         dtype=tf.float32, shape=(None, 60, 80, 19), name='heatMat_in')
     self.tensor_pafMat = tf.placeholder(
         dtype=tf.float32, shape=(None, 60, 80, 38), name='pafMat_in')
     self.upsample_size = tf.placeholder(
         dtype=tf.int32, shape=(2,), name='upsample_size')
     self.tensor_heatMat_up = tf.image.resize_area(
         self.tensor_heatMat, self.upsample_size, align_corners=False, name='upsample_heatmat')
     self.tensor_pafMat_up = tf.image.resize_area(
         self.tensor_pafMat, self.upsample_size, align_corners=False, name='upsample_pafmat')
     smoother = Smoother({'data': self.tensor_heatMat_up}, 25, 3.0)
     gaussian_heatMat = smoother.get_output()
     max_pooled_in_tensor = tf.nn.pool(gaussian_heatMat, window_shape=(
         3, 3), pooling_type='MAX', padding='SAME')
     self.tensor_peaks = tf.where(tf.equal(
         gaussian_heatMat, max_pooled_in_tensor), gaussian_heatMat, tf.zeros_like(gaussian_heatMat))
     self.heatMat = self.pafMat = None
     self.persistent_sess = tf.InteractiveSession()
     self.persistent_sess.run(tf.variables_initializer(
        [v for v in tf.global_variables() if
         v.name.split(':')[0] in [x.decode('utf-8') for x in
                                  self.persistent_sess.run(tf.report_uninitialized_variables())]
         ])
     )


def inference(self, heatmat, pafmat, upsample_size=4.0):
    peaks, heatMat_up, pafMat_up = self.persistent_sess.run(
        [self.tensor_peaks, self.tensor_heatMat_up, self.tensor_pafMat_up], feed_dict={
            self.tensor_heatMat: [heatmat], self.tensor_pafMat: [pafmat], self.upsample_size: (240, 320)
        })
    peaks = peaks[0]
    self.heatMat = heatMat_up[0]
    self.pafMat = pafMat_up[0
    humans = PoseEstimator.estimate_paf(peaks, self.heatMat, self.pafMat)
    return humans

所以self.tensor_heatMatself.tensor_pafMat需要成批的张量。你知道吗

这些占位符的输入数据是:

outputs = outputs.reshape(32, 60, 80, 57)
heat_maps = outputs[:, :, :, : 19]
puf_maps = outputs[:, :, :, 19:]     
humans = inference(heat_maps, puf_maps,4.0)

heat_mapspuf_maps形状是(32, 60, 80, 19)(32, 60, 80, 38)。 但是当我用输入张量运行会话时,出现了一个错误:

ValueError: Cannot feed value of shape (1, 32, 60, 80, 19) for Tensor 'heatMat_in:0', which has shape '(?, 60, 80, 19)'

有什么问题吗?你知道吗


Tags: nameinselfnonesizetfgaussianmaps
1条回答
网友
1楼 · 发布于 2024-10-02 18:14:47

错误在feed_dict中。如果将张量放在列表中,那么TensorFlow会将列表解释为张量的第一个维度。这就是相同的(1, 32, ...)的来源。你应该这样做

feed_dict={
    self.tensor_heatMat: heatmat,
    self.tensor_pafMat: pafmat,
    self.upsample_size:(240,320)}

第一个维度将是32,这是您在model init方法中作为None保留的变量batch。你知道吗

相关问题 更多 >