gpt4 book ai didi

python - 使用 Pytorch 的范数函数绘制二次损失并使用 Plotly 显示它

转载 作者:行者123 更新时间:2023-12-05 03:19:58 24 4
gpt4 key购买 nike

我有一个二次损失 z=(1/2)||Aw-b||^2 其中 A4x2 矩阵, w=[x,y] 是一个2d 向量,b 是一个4d 向量。如果我们绘制 z,就会有一个根据 x,y 表示的曲面。我想使用 Plotly 库绘制 z 。为此,我想使用 Pytorch 和函数 torch.norm 来计算范数。 Here是绘制 3d 表面的有效示例,我想按如下方式修改它:

import plotly.graph_objects as go
import numpy as np

A = torch.tensor([[ 0.1542, -0.0682],
[ 0.8631, 0.6762],
[-1.4002, 1.1773],
[ 0.4614, 0.2431]])

b = torch.tensor([-0.2332, -0.7453, 0.9061, 1.2118])

x = np.arange(-1,1,.01)
y = np.arange(-1,1,.01)
X,Y = np.meshgrid(x,y)

W = ??????

Z = 0.5*torch.norm(torch.matmul(A, W)-b)**2

fig = go.Figure(
data=[go.Surface(z=Z, x=x, y=y, colorscale="Reds", opacity=0.5)])
fig.update_layout(
title='My title',
autosize=False,
width=500,
height=500,
margin=dict(l=65, r=50, b=65, t=90),
scene_aspectmode='cube'
)
fig.show()

问题:

我应该如何修改包含 x,yW 来绘制曲面?

最佳答案

你可以简单地做:

Z = [[0.5 * torch.norm(torch.matmul(A, torch.tensor([float(xx), float(yy)]))-b)**2 for xx in x] for yy in y]

更新:您可以使用 torch 的微批处理功能显着提高性能。为此,您必须将数据 reshape 为矩阵列表。这意味着您必须将张量 A 扩展到仅包含一个矩阵的列表,并将 W 扩展到包含所有网格点的列表,每个网格点都是矩阵。

import plotly.graph_objects as go
import torch

A = torch.tensor([[[0.1542, -0.0682],
[0.8631, 0.6762],
[-1.4002, 1.1773],
[0.4614, 0.2431]]])

b = torch.tensor([-0.2332, -0.7453, 0.9061, 1.2118])

x = torch.arange(-1, 1, 0.01)
y = torch.arange(-1, 1, 0.01)
W = torch.reshape(torch.cartesian_prod(x, y), (len(x) * len(y), 2, 1))

V = torch.reshape(torch.matmul(A, W), (len(x), len(y), 4)) - b
Z = 0.5 * torch.norm(V, dim=2)**2

关于python - 使用 Pytorch 的范数函数绘制二次损失并使用 Plotly 显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73315290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com