var = [[0, 1, -4, 8],
[2, -3, 2, 1],
[5, -8, 7, 1]]
var = torch.Tensor(var)
Run Code Online (Sandbox Code Playgroud)
这里,var
是一个 3 x 4 (2d) 张量。如何交换第一行和第二行以获得以下二维张量?
2, -3, 2, 1
0, 1, -4, 8
5, -8, 7, 1
Run Code Online (Sandbox Code Playgroud) 我有一个字符串格式的数字列表。我使用 将该列表转换为 numpy 数组np.asarray()
。
如何将字符串元素转换为整数?
如何用 torch 中的值填充对角线?在 numpy 中你可以这样做:
a = np.zeros((3, 3), int)
np.fill_diagonal(a, 5)
array([[5, 0, 0],
[0, 5, 0],
[0, 0, 5]])
Run Code Online (Sandbox Code Playgroud)
我知道torch.diag()
返回对角线,但如何使用它作为掩码来分配新值超出了我的范围。我无法在这里或 PyTorch 文档中找到答案。
我正在寻找通过 Pytorch 获取函数的雅可比行列式的最有效方法,并且到目前为止提出了以下解决方案:
# Setup
def func(X):
return torch.stack((X.pow(2).sum(1),
X.pow(3).sum(1),
X.pow(4).sum(1)),1)
X = Variable(torch.ones(1,int(1e5))*2.00094, requires_grad=True).cuda()
Run Code Online (Sandbox Code Playgroud)
# Solution 1:
t = time()
Y = func(X)
J = torch.zeros(3, int(1e5))
for i in range(3):
J[i] = grad(Y[0][i], X, create_graph=True, retain_graph=True, allow_unused=True)[0]
print(time()-t)
>>> Output: 0.002 s
Run Code Online (Sandbox Code Playgroud)
# Solution 2:
def Jacobian(f,X):
X_batch = Variable(X.repeat(3,1), requires_grad=True)
f(X_batch).backward(torch.eye(3).cuda(), retain_graph=True)
return X_batch.grad
t = time()
J2 = Jacobian(func,X)
print(time()-t)
>>> Output: 0.001 s
Run Code Online (Sandbox Code Playgroud)
由于在第一个解决方案中使用循环与在第二个解决方案中使用循环似乎没有太大区别,我想问一下是否还有更快的方法来计算 pytorch 中的雅可比行列式。
我的另一个问题也是关于什么可能是计算 Hessian 的最有效方法。
最后,有谁知道在 TensorFlow 中是否可以更轻松或更高效地完成此类操作?
让我们考虑一下,有两个数组I
,并J
由此确定邻居对:
I = np.array([0, 0, 1, 2, 2, 3])
J = np.array([1, 2, 0, 0, 3, 2])
Run Code Online (Sandbox Code Playgroud)
这意味着元素0
有两个邻居1
和2
。元素1
只有0
作为邻居等等。
什么是创建所有邻居三元组阵列的最有效的方式I'
,J'
,K'
这样j
是邻居i
和k
是邻居j
给出的条件i
,j
以及k
不同的元素(i != j != k
)?
Ip = np.array([0, 0, 2, 3])
Jp = np.array([2, 2, 0, 2])
Kp = np.array([0, 3, 1, 0])
Run Code Online (Sandbox Code Playgroud)
当然,一种方法是遍历每个元素。有没有更高效的算法?(使用 10-5 亿个元素)
我有一个形状张量(3072,1000)
,代表神经网络中的权重。我想要:
注意:我的网络不是使用反向传播算法的通常的人工神经网络,而是大脑中神经元的生物物理模型,因此我使用特殊的权重更新规则。因此,我认为pytorch中的现成函数(如果有的话)可能没有帮助。
我尝试了以下代码,它可以工作,但需要很长时间,因为每次更新权重张量后,我都必须运行该代码以再次将权重张量设置为 60% 零
row_indices = np.random.choice(np.size(mytensor.weight, 0),
replace=False,size=int(np.size(mytensor.weight, 0)* 0.6))
column_indices = np.random.choice(np. size(mytensor.weight, 1),
replace=False, size=int(np. size(mytensor.weight, 1) * 0.6))
for r in row_indices:
for c in column_indices:
(mytensor.weight)[r][c] = 0
Run Code Online (Sandbox Code Playgroud) 此代码来自 PyTorch 转换器:
self.linear1 = Linear(d_model, dim_feedforward, **factory_kwargs)
self.dropout = Dropout(dropout)
self.linear2 = Linear(dim_feedforward, d_model, **factory_kwargs)
self.norm1 = LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs)
self.norm2 = LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs)
self.norm3 = LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs)
self.dropout1 = Dropout(dropout)
self.dropout2 = Dropout(dropout)
self.dropout3 = Dropout(dropout)
Run Code Online (Sandbox Code Playgroud)
为什么他们要添加self.dropout1
, ...2
,...3
当self.dropout
已经存在并且是完全相同的功能时?
self.linear1
另外,( , self.linear2
) 和 之间有什么区别self.linear
?
我想创建一个围绕坐标 5 英里的精确缓冲区,我当前的代码是:
cpr_gdf['p_buffer']=cpr_gdf['coordinates'].buffer(5*(1/60))
Run Code Online (Sandbox Code Playgroud)
坐标列是使用以下代码创建的:
cpr_df['coordinates']=list(zip(cpr_df.sample_longitude_decimal,cpr_df.sample_latitude_decimal))
cpr_df['coordinates']=cpr_df['coordinates'].apply(Point)
cpr_gdf=gpd.GeoDataFrame(cpr_df,geometry='coordinates',crs={'init' :'epsg:4326'})
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我正在使用 Pandas 制作 DataFrame。然而,DataFrame 的某些部分包含一个字符串。沿数据框的行求和时,如何忽略总和中的这些字符串?
df["sum"] = df.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)