python - 使用张量向量化 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 循环
解决方案
尝试普通的旧矩阵乘法:
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
是必要的,如果没有它,您可能会遇到转换错误。
推荐阅读
- python - FastAPI RedirectResponse 自定义标头
- syncfusion - 在图表顶部显示 Syncfusion Chart TrackBall
- c - 我可以在主函数和子函数中使用 gtk_main() 吗?
- android - 如何在android的“MaterialTextView”中实现以下设计?
- session - 如何停止 JSF1.2 以停止重新加载同一页面
- docker - 在容器中运行时重新加载电报配置的最佳方法
- java - 如何查找 BufferedReader 文件中是否存在一行?
- c++ - 消除函数指针的歧义
- html - CSS:按像素而不是比例变换比例
- node.js - 在 Node.js 中使用 Winston 和 Winston-Daily-Rotate-File 在 JSON 对象中输出日志