Skip to main content
 首页 » 编程设计

python之如何在 tensorflow 中自动合并形状

2024年12月31日25cloudgamer

对于高阶张量,我不知道如何自动操纵它的形状。

例如:

                                #   0  1  2  3   -1 
a.shape                         # [?, ?, ?, ?, ..., ?] 
merge_dims(a, [0]   ).shape     # [?* ?, ?, ?, ..., ?] 
merge_dims(a, [1, 2]).shape     # [?, ?* ?* ?, ..., ?] 
                                #   ^  ^  ^  ^    ^ 

使用merge_dims,由位置数字标记的逗号应该变成乘法,形成一个低阶张量。

谢谢:)

请您参考如下方法:

这是一个做类似事情的函数:

import tensorflow as tf 
 
def merge_dims(x, axis, num=1): 
    # x: input tensor 
    # axis: first dimension to merge 
    # num: number of merges 
    shape = tf.shape(x) 
    new_shape = tf.concat([ 
        shape[:axis], 
        [tf.reduce_prod(shape[axis:axis + num + 1])], 
        shape[axis + num + 1:]], axis=0) 
    return tf.reshape(x, new_shape) 
 
with tf.Graph().as_default(), tf.Session() as sess: 
    a = tf.ones([2, 4, 6, 8, 10]) 
    print(sess.run(tf.shape(merge_dims(a, 0)))) 
    # [ 8  6  8 10] 
    print(sess.run(tf.shape(merge_dims(a, 1, num=2)))) 
    # [  2 192  10]