【问题标题】:Model considering a single tensor as batch input考虑单个张量作为批量输入的模型
【发布时间】:2020-10-02 17:28:35
【问题描述】:

我编写了一个自定义 TensorFlow 模型。但是,当我将单个张量传递给它时,它会将该张量的每个元素视为单个输入,因此会给出批量输出。

例如。我的输入张量的形状为 [3,1],其值:

tf.Tensor(
[[0.7001484 ]
 [0.2581525 ]
 [0.04169908]], shape=(3, 1), dtype=float32)

与此相对应,我应该得到一个形状为 (3,) 的向量。但我得到的是 3x3 张量:

tf.Tensor(
[[0.31234854 0.3224371  0.36521438]
 [0.32561225 0.3294511  0.3449366 ]
 [0.33208787 0.33271718 0.33519495]], shape=(3, 3), dtype=float32)

我的模型

class MAE_Model(tf.keras.Model):

def __init__(self):
    super(MAE_Model, self).__init__()
    self.h_fin = EnsembleBlock() 
    self.ipt = tf.keras.layers.InputLayer(input_shape=(3,1), batch_size=None)
    self.fc_1 = tf.keras.layers.Dense(16, activation='relu')
    self.fc_2 = tf.keras.layers.Dense(16, activation='relu')
    self.classifier = tf.keras.layers.Dense(3, activation='softmax')

def call(self, inputs):
    x = self.h_fin(inputs) # this returns a vector of shape [3] E.g. x = [1., 2., 3.]
    x = tf.reshape(x, (3,1)) 
    print(x)
    x = self.ipt(x)
    x = self.fc_1(x)
    x = self.fc_2(x)
    return self.classifier(x)

这里,print(x) 打印一个 (3,1) 张量,类似于上面的示例。有没有办法解决这个问题? 我希望模型将 x 视为单个输入(整个)而不是一些批量输入

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    您的模型的输出是有意义的。它给出 3x3 张量的原因是因为模型中的最后一层输出对应于 3 个类别的概率。因此,给定一批 3 个输入,您的输出将具有批次中每个元素的 3 个类的概率。如果要找到预测的类,则需要概率最高的类。 Tensorflow 让你可以通过以下方式轻松找到类

    tf.argmax(predictions, axis=-1)
    

    此操作的相应输出形状将是形状 (None,),其中 None 是批量大小。

    【讨论】:

    • 嗨,我不是要通过批次。我想要的是让 x = [1., 2., 3.],即形状 [3] 的向量。我希望我的模型将其视为单个输入并输出与此相对应的单个向量。那么我应该将我的输入重塑为其他形状吗?
    • 在tensorflow中,必须给模型一个batch才能进行预测。在这种情况下,由于 x 是您要进行预测的一个数据点,您可以调用 tf.expand_dims(x, axis=0) 为您的数据点提供大小为 1 的批量维度。这允许您将其输入到您的模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多