我一直在尝试更好地理解RNN,并且正在使用numpy从头开始创建一个RNN。我在计算损失的时候,有人建议我不要用梯度下降和权重矩阵来更新自己,而是使用pytorch .backward函数。我开始阅读这里的一些文档和帖子,介绍它是如何工作的,似乎它将计算火炬张量在函数调用中包含requires_grad=True的梯度。
因此,除非创建火炬张量,否则我无法使用.backward。当我试图在损失标量上这样做时,我会得到一个'numpy.float64' object has no attribute 'backward'错误。我只是想确认一下。谢谢!
这个问题有两个部分(也许是一个解决方案?):
来自稀疏矩阵的样本向量:从稀疏矩阵中抽取向量有一个简单的方法吗?当我试图使用random.sample对行进行采样时,我得到了一个TypeError:稀疏矩阵长度是不明确的。
from random import sample
import numpy as np
from scipy.sparse import lil_matrix
K = 2
m = [[1,2],[0,4],[5,0],[0,8]]
sample(m,K) #works OK
mm = np.array(m)
sample(m,K) #works OK
sm =
我想通过乘2个火炬向量A(Shapen1)和B=A'(shape1,N)来计算一个矩阵(shape1,N)。
当我使用torch.matmul或torch.mm时,我会得到错误或A‘a(shape-1)。
如果A被表示为A = [a_1, a_2, ..., a_N]',我要计算一个矩阵C,它的(i,j)元素是
for i in range(N):
for j in range(N):
C(i,j) = a_i * a_j
我想快速计算一下。你有什么想法吗?谢谢你的帮助!
我试图通过一个索引矩阵来访问一个火炬张量,最近我发现了这个代码,我找不到为什么它不起作用的原因。
下面的代码分为两部分。上半场证明是有效的,而第二次旅行则是错误的。我不明白为什么。有人能解释一下这件事吗?
import torch
import numpy as np
a = torch.rand(32, 16)
m, n = a.shape
xx, yy = np.meshgrid(np.arange(m), np.arange(m))
result = a[xx] # WORKS for a torch.tensor of size M >= 32. It doesn'
在Matlab中,我有两个m-by-n矩阵x和Y,带有n>m,我需要定义一个三维m-by m-n矩阵Z,它的分量可以计算为
for i=2:m
for j=i+1:m
for k=1:n
Z(i,j,k) = (Y(j-1,k)-Y(i-1,k))*X(j-1,k);
end
end
end
由于这些嵌套循环需要很长的计算时间,我一直在寻找一种使用矩阵乘法来定义矩阵Z的方法,但到目前为止我还没有成功。有什么建议吗?
我有一个矩阵,例如,定义为在行上迭代的x_matrix = np.zeros(200,16),我需要给这个矩阵的每一行分配两个分量向量,a1是一个有10个元素的数组,a2是属于y_dataframe y_dataframe形状为(200,6)的熊猫数据帧的对应行 我可以像下面这样迭代矩阵。但是我还需要x_matrix的行号来检索y_dataframe中的相应行。是否有其他方法可以迭代矩阵行,并使用如上所述的不同分量向量组成矩阵行。 for row in x_matrix
通过命令行输入n×n矩阵的哪种形式对您来说是最友好的?具体来说,我想知道一种用户友好的方式来输入内容--一个不对称的n×n矩阵,其中主对角线上的所有元素都等于0。用户需要通过参数输入数据。
存在多种方式,这个问题似乎是在简洁性和可读性之间的一个选择。例如,假设以下不对称的n×n矩阵:
A B C
A 0 1 2
B 2 0 1
C 3 0.5 0
假设矩阵内容是逐行提供的,强调简洁的形式可以是:
user_inp = "1,2,2,1,3,0.5"
相反,强调可读性的形式可能是:
user_inp = "0,1,2;2,0,1;3
我试图输入两个值作为一个2乘3矩阵,但不断得到错误‘字符串不是在正确的格式’,这段代码已经解决了其他问题,但现在没有,有什么建议吗?
int test = Convert.ToInt32(Console.ReadLine());
int[,] nutjob = new int[2, 3];
for(int i = 0; i < 3; i++ )
{
for(int o = 0; o < 2; o++)
{
nutjob[o,i] = int.Parse(Console.ReadLine().Split());