Traceback (most recent call last): File "E:/403/myworld/VGAE/trainTest.py", line 116, in <module> train(model, optimizer, dataBase, device) File "E:/403/myworld/VGAE/trainTest.py", line 57, in train loss = loss_function(output, labels, mu, logvar, adj) File "E:/403/myworld/VGAE/trainTest.py", line 41, in loss_function recon_loss = criterion(output.view(-1), torch.from_numpy(adj).view(-1))# 重构误差 TypeError: expected np.ndarray (got csr_array)
时间: 2024-03-02 19:48:45 浏览: 227
根据错误提示,`criterion`期望接收一个NumPy数组作为输入,但是您传递给它的是一个`csr_matrix`类型的稀疏矩阵对象`adj`。因此,您需要将`csr_matrix`类型的稀疏矩阵对象转换为NumPy数组。
可以使用`toarray()`方法将稀疏矩阵转换为稠密矩阵,然后使用`.view(-1)`方法将二维矩阵转换为一维向量:
```python
import torch
import dgl
import numpy as np
from scipy.sparse import csr_matrix
with open('graph.bin', 'rb') as f:
graph_data = np.load(f, allow_pickle=True)
graph = dgl.graph((graph_data['edge_index'][0], graph_data['edge_index'][1]))
adj = csr_matrix((graph_data['adjacency_matrix'] != 0).astype(np.float32)) # 转换为csr_matrix类型
model = MyModel()
output = model(graph)
criterion = torch.nn.BCEWithLogitsLoss()
recon_loss = criterion(output.view(-1), torch.from_numpy(adj.toarray()).view(-1)) # 转换为NumPy数组
```
在上述示例代码中,我们使用`csr_matrix`类型将邻接矩阵转换为稀疏矩阵。然后,我们使用`toarray()`方法将稀疏矩阵转换为稠密矩阵,最后使用`.view(-1)`方法将二维矩阵转换为一维向量。最终,我们将转换后的NumPy数组传递给损失函数`criterion`进行计算。
阅读全文