python - 为什么 tensor.numpy() 输出不同的值?
问题描述
我在特征矩阵和该矩阵的一行上使用了 tensor.numpy() 进行比较。我发现行输出和矩阵的相应行的值不一样。有谁知道为什么?
def consine_distance_byrow(f1, f2):
feat1 = f1.view(-1, 1)
dists = torch.mm(f2, feat1)
dists = dists.numpy()
return dists
def consine_distance(f1, f2):
feat1 = torch.transpose(f1, 0, 1)
dists = torch.mm(f2, feat1)
dists = dists.numpy()
return dists
# load trainingset data
feature_path = '../../cnn/pytorch_result_train_val_' + str(self.feature_nums) + '.mat'
result = scipy.io.loadmat(feature_path)
train_feature = torch.FloatTensor(result['train_f']) # M x 512d
dists = consine_distance(train_feature, train_feature) # way1
for i in range(len(train_label)):
distsT = consine_distance_byrow(train_feature[i], train_feature) # way2
# here, dists[:,i] is slightly different with distsT
例如
dists[:0] = [ 1.0000001 -0.15086517 -0.08085391 ... -0.05950543 -0.03058994
0.10164267]
while i=0, distT = [[ 0.99999964]
[-0.15086518]
[-0.0808539 ]
...
[-0.05950541]
[-0.03058996]
[ 0.1016427 ]]
显然,略有不同。
这是在tensor.numpy()之后引起的,在这一步之前两个张量是相同的
解决方案
推荐阅读
- r - 如何使用嵌套图加快反应速度?
- excel - 有没有更好的方法来编写这个 VBA 代码?
- flutter - 小部件库 BoxConstraints 捕获的异常具有负的最小宽度
- javascript - react.js 中的 Openweather api 调用失败
- java - 有没有办法使用 gradle 来混淆 minecraft 1.8.9 的代码?
- java - 将字符串从 EditText 保存到 SQLite
- amazon-web-services - 如何在 CDN 上同时提供静态 HTML 和资产并拥有友好的 URL
- redis - Redis XRANGE:ERR 指定为流命令参数的流 ID 无效
- r - 如何将列拆分为包含原始数据框中的列的数据框?
- azure - 我们能否将 Azure 蓝图分配给资源或资源组