You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何创建1000个图的数据集并解决训练类型不匹配报错

问题排查与修复方案

错误原因

  • 报错RuntimeError: expected scalar type Float but found Long的核心触发原因是:你生成的节点特征x、边属性edge_attr都指定为LongTensor整数类型,但PyTorch神经网络中的线性层参数默认是浮点类型,两类数据类型不匹配导致计算报错。
  • 如果你当前做的是节点分类任务,标签y使用LongTensor类型是合理的,不需要调整。

修复后的1000个图数据集生成代码

import numpy as np
import torch
from torch_geometric.data import Data
from random import randint

data_list = []
ngraphs = 1000
for i in range(ngraphs):
      num_nodes = randint(10,500)
      num_edges = randint(10, num_nodes*(num_nodes - 1))
      f1 = np.random.randint(10, size=(num_nodes))
      f2 = np.random.randint(10,20, size=(num_nodes))
      f3 = np.random.randint(20,30, size=(num_nodes))
      f_final = np.stack((f1,f2,f3), axis=1)
      capital = 2*f1 + f2 - f3

      capital_t = torch.from_numpy(capital)
      # 分类任务标签保留LongTensor即可,回归任务可修改为FloatTensor
      capital_t = capital_t.type(torch.LongTensor)

      x = torch.from_numpy(f_final)
      # 节点特征修改为浮点类型,匹配网络参数类型
      x = x.type(torch.FloatTensor)

      edge_index = torch.randint(low=0, high=num_nodes, size=(num_edges,2), dtype=torch.long)
      edge_attr = torch.randint(low=0, high=50, size=(num_edges,1), dtype=torch.long)
      # 边属性修改为浮点类型,若你的GNN模型不需要用到边属性可跳过该修改
      edge_attr = edge_attr.type(torch.FloatTensor)

      data = Data(x = x, edge_index = edge_index.t().contiguous(), y = capital_t, edge_attr=edge_attr )
      data_list.append(data)

补充说明

  • GPU训练时需要保证网络、输入特征、标签都在同一个设备上,可统一调用.to(device)处理。
  • 如果是回归任务,将capital_t的类型也改为torch.FloatTensor即可。

内容的提问来源于stack exchange,提问作者riskiem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 08:18:02