为Keras模型的给定输入为所有尺寸打印形状值

时间:2020-05-29 10:21:54

标签: tensorflow keras

我有一个简单的Keras模型-

def print_tensor_shape(x):
    print(x.shape)
    return x

def stem(stem_width=32):
    inputs = keras.layers.Input(shape=[None, None, 3])
    X = keras.layers.ZeroPadding2D((1,1))(inputs)
    X = keras.layers.Conv2D(stem_width, kernel_size = 3, strides = 2, activation='relu')(X)
    keras.layers.Lambda(print_tensor_shape)(X)
    return keras.models.Model(inputs=inputs, outputs=X) 

我想查看卷积层之后特定输入张量的张量的确切形状。但是,当我运行-

inputs = tf.zeros([32,512,512,3])
out = stem()(inputs)

我得到的输出是

(None, None, None, 32)

我想知道形状[32,512,512,3]的输入,而不仅仅是[None, None, None]的前三个尺寸的确切值。任何人都可以帮助我做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您看到的打印输出(无,无,无,32)与您传递的输入无关。它通常指的是图层尺寸。如果要检查所需的打印件,请注意在模型中连接Lambda层。这样,您每次传递新输入时即可调用该函数

def print_tensor_shape(x):
    print(x.shape)
    return x

def stem(stem_width=32):
    inputs = keras.layers.Input(shape=[None, None, 3])
    X = keras.layers.ZeroPadding2D((1,1))(inputs)
    X = keras.layers.Conv2D(stem_width, kernel_size = 3, strides = 2, activation='relu')(X)
    X = keras.layers.Lambda(print_tensor_shape)(X)
    return keras.models.Model(inputs=inputs, outputs=X) 

inputs = tf.zeros([32,512,512,3])
out = stem()(inputs)