在像FCN,segnet这样的张量流编码器 - 解码器模型中,如何给出任意输入大小?

时间:2018-03-29 07:02:24

标签: python tensorflow image-segmentation

对于tensorflow中的图像语义分割模型,我需要为FCN或segnet模型提供可变大小的输入。所以我使用了一个placeholer:

self.input= tf.placeholder(tf.float32, shape=(batch_size,None,None,3),name='')

在编码器 - 解码器模型中,我需要在maxpooling之后取消拼接,代码如下:

#upsample fuction used in decoder
def _upsample_along_axis(volume, axis, stride, mode='COPY'):
    shape = volume.get_shape().as_list()
    assert 0 <= axis < len(shape)
    target_shape = shape[:]
    target_shape[axis] *= stride
    padding = tf.zeros(shape, dtype=volume.dtype) if mode == 'ZEROS' else volume
    parts = [volume] + [padding for _ in range(stride - 1)]
    volume = tf.concat(parts, min(axis+1, len(shape)-1))
    target_shape = np.array(target_shape)
    target_shape[0] = -1
    volume = tf.reshape(volume, target_shape)

    return volume

现在target_shape [axis]为none,因此target_shape[axis] *= stride会引发错误: TypeError:*:&#39; NoneType&#39;不支持的操作数类型和&#39; int&#39;

所以编码器 - 解码器模型的输入可以变化吗?

1 个答案:

答案 0 :(得分:2)

Tensor的cmd := exec.Command("psql", "-d", "database_name", "-f", "path/to/database.sql") stderr, err := cmd.StderrPipe() if err != nil { panic(err) } if err := cmd.Start(); err != nil { panic(err) } errout, _ := ioutil.ReadAll(stderr) if err := cmd.Wait(); err != nil { fmt.Println(errout) panic(err) } 函数返回推断的形状,对于动态尺寸,推断的形状为get_shape。 TensorFlow中有一个返回动态形状的函数:tf.shape

此函数返回将评估为形状实际值的张量。

此外,您可能会发现两个对您的案例有用的功能:tf.padtf.tile