首页 > 解决方案 > 使用张量向量化 Tensorflow

问题描述

我有形状(10,2)的张量x 我有形状 (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)

从 ML 的角度来看,我正在计算损失函数 wrt 权重的梯度。
损失函数是 MSE。

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

标签: pythontensorflow

解决方案



尝试普通的旧矩阵乘法

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是必要的,如果没有它,您可能会遇到转换错误。


推荐阅读