Skip to main content
 首页 » 编程设计

python之如何在 TensorFlow 中查看层的输出大小

2025年01月19日30JeffreyZhao

我是 TensorFlow 的新手,目前正在使用该库编写我的第一个 CNN。以前我使用过 keras 并使用 model.summary() 函数检查层的输出尺寸。 如何检查 TensorFlow 中层的输出维度?这是我的模型:

generator(input, random_dim, is_train, reuse=False): 
    c4, c8, c16, c32, c64 = 512, 256, 128, 64, 32 # no of nodes in each conv2d layer 
    s4 = 4 
    output_dim = CHANNEL  # B/W image for RGB channel = 3 
    with tf.variable_scope('gen') as scope:  
        if reuse: 
            scope.reuse_variables() 
        w1 = tf.get_variable('w1', shape=[random_dim, s4 * s4 * c4], dtype=tf.float32, 
                             initializer=tf.truncated_normal_initializer(stddev=0.02)) 
        b1 = tf.get_variable('b1', shape=[c4 * s4 * s4], dtype=tf.float32, 
                             initializer=tf.constant_initializer(0.0)) 
        flat_conv1 = tf.add(tf.matmul(input, w1), b1, name='flat_conv1') 
 
        conv1 = tf.reshape(flat_conv1, shape=[-1, s4, s4, c4], name='conv1') 
        bn1 = tf.contrib.layers.batch_norm(conv1, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn1') 
        act1 = tf.nn.relu(bn1, name='act1') 
        # 8*8*256 
 
        conv2 = tf.layers.conv2d_transpose(act1, c8, kernel_size=[3, 3], strides=[2, 2], padding="SAME", 
                                           kernel_initializer=tf.truncated_normal_initializer(stddev=0.02), 
                                           name='conv2') 
        bn2 = tf.contrib.layers.batch_norm(conv2, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn2') 
        act2 = tf.nn.relu(bn2, name='act2') 
        # 16*16*128 
        conv3 = tf.layers.conv2d_transpose(act2, c16, kernel_size=[3, 3], strides=[2, 2], padding="SAME", 
                                           kernel_initializer=tf.truncated_normal_initializer(stddev=0.02), 
                                           name='conv3') 
        bn3 = tf.contrib.layers.batch_norm(conv3, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn3') 
        act3 = tf.nn.relu(bn3, name='act3') 
        # 32*32*64 
        conv4 = tf.layers.conv2d_transpose(act3, c32, kernel_size=[3, 3], strides=[2, 2], padding="SAME", 
                                           kernel_initializer=tf.truncated_normal_initializer(stddev=0.02), 
                                           name='conv4') 
        bn4 = tf.contrib.layers.batch_norm(conv4, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn4') 
        act4 = tf.nn.relu(bn4, name='act4') 
        # 64*64*32 
        conv5 = tf.layers.conv2d_transpose(act4, c64, kernel_size=[3, 3], strides=[2, 2], padding="SAME", 
                                           kernel_initializer=tf.truncated_normal_initializer(stddev=0.02), 
                                           name='conv5') 
        bn5 = tf.contrib.layers.batch_norm(conv5, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn5') 
        act5 = tf.nn.relu(bn5, name='act5') 
 
        #128*128*3 
        conv6 = tf.layers.conv2d_transpose(act5, output_dim, kernel_size=[3, 3], strides=[2, 2], padding="SAME", 
                                           kernel_initializer=tf.truncated_normal_initializer(stddev=0.02), 
                                           name='conv6') 
        # bn6 = tf.contrib.layers.batch_norm(conv6, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn6') 
 
        #BATCH NORM IN EVERY LAYER EXCEPT LAST ! 
        act6 = tf.nn.tanh(conv6, name='act6') 
        return act6 

使用 python 3

请您参考如下方法:

在编译时(未知维度将具有 None 或 ? 值):

a = ...  # Your tensor 
print(a.shape.dims) 

在运行时(未知维度将从输入数据计算):

sess = tf.Session() 
a = ... # Your tensor 
feed_dict = {...}  # Values required to compute a 
shape_op = tf.shape(a) 
shape_res = sess.run(shape_op, feed_dict=feed_dict) 
print(shape_res) 

干杯