【问题标题】:Vectorization using tensors Tensorflow使用张量向量化 Tensorflow
【发布时间】:2020-08-20 22:41:36
【问题描述】:

我的张量 x 的形状为 (10,2)
我有形状 (10,)
的张量 y 我有形状 (10,)

的张量 y_pred

我想使用以下公式计算形状为 (2,1) 的张量 dw

令dw1和dw2为张量dw中的元素。
dw1 = tf.reduce_sum(x1 * ( y - y_pred)) * (-2/n)
其中,
x1 = 张量 x 的第一列
n = 标量

dw2 = tf.reduce_sum(x2 * (y - y_pred)) * (-2/ n)
其中,
x2 = 张量 x 的第二列
n = 标量

但是,张量 x 将具有动态形状。
如果张量 x 的形状为 (10,3)
dw 的形状为 (3,1)

从机器学习的角度来看,我正在计算损失函数 w.r.t 权重的梯度。
损失函数为 MSE。

我知道如何使用 for 循环来实现这一点。
但我不明白我应该如何使用矢量化来实现它,即。不使用任何 for 循环

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    尝试简单的旧matrix multiplication

    x = tf.ones((10,2), dtype=tf.float32)
    y = tf.ones((10,1), dtype=tf.float32) * 2
    y_pred = tf.ones((10,1), dtype=tf.float32) * 3
    n = 3
    
    result = tf.matmul(tf.transpose(x), y-y_pred) / (-n/2)
    

    解释:

    tf.ones 创建一个矩阵用于演示。第一个参数标志着它的形状。 x 的形状为 10 乘 2,要将其乘以形状为 10 的矩阵乘以 1,您需要转置 x
    然后你只需做你需要的矩阵乘法。

    请注意,dtype=tf.float32 是必需的,如果没有它,您可能会遇到转换错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多