【发布时间】:2022-01-03 04:22:46
【问题描述】:
如何在训练时获得张量的“实际”形状?例如,
(None, 64) -> (128, 64)
换句话说,在训练时,我得到一个类似于(None, 64) 的形状,其中None 表示张量的第一维是动态的输入大小,64 是第二维的示例值.我假设在训练时,框架知道该张量的“实际”大小,所以我想知道如何/是否可以获得张量的实际大小,其中 None 被评估为 train/test/eval数据集大小。因此,我有兴趣获得(128, 64) 而不是(None, 64),其中128 是输入的大小。
请考虑以下简化代码示例。
class ALayer(tensorflow.keras.layers.Layer):
def call(self, inputs):
features = tf.matmul(inputs, self.kernel) + self.bias
# These are the different approaches I've tried.
print(features.shape)
# This prints: (None, 64)
print(tf.shape(features)
# This prints: Tensor("ALayer/Shape:0", shape=(2,), dtype=int32)
return features
input_layer = layers.Input(input_dim)
x = ALayer()([input_layer])
x = layers.Dense(1)(x)
model = keras.Model(inputs=[input_layer], outputs=[x])
model.compile()
train_dataset = tf.data.Dataset.from_tensor_slices((X_train, (y_train)))
val_dataset = tf.data.Dataset.from_tensor_slices((X_val, (y_val)))
model.fit(train_dataset, validation_data=val_dataset)
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning