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

Tensorflow 为Keras模型的给定输入打印所有尺寸的形状值,tensorflow,keras,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, kern

我有一个简单的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)
我想知道输入形状
[32512512,3]
的前3个维度的准确值,而不仅仅是
[None,None,None]
。任何人都可以帮我做这件事吗?

您看到的打印输出(无、无、无、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)