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

运行DeepChem代码遇ValueError错误,求DTNN模型输出修正方案

问题分析与解决方案

核心问题

你的代码存在三个关键错误:

  1. 任务类型混淆:QM7是回归任务(预测连续能量值),但你错误设置了分类任务的n_class参数,且用了分类指标roc_auc_score。
  2. n_tasks参数错误:将n_tasks设为23*23(特征维度),但n_tasks代表的是任务数量(这里仅需预测1个能量值),导致模型输出529维向量而非单个值。
  3. 指标不匹配:roc_auc_score是分类任务指标,不适合回归任务评估。

修改后的完整代码

!pip install --pre deepchem

import deepchem as dc
import pandas as pd
import torch
import tensorflow as tf

# 特征化设置不变
featurizers = dc.feat.CoulombMatrix(max_atoms=23)
splitter = "stratified"
tasks, datasets, transformers = dc.molnet.load_qm7(featurizer=featurizers, split=splitter)
train_dataset, valid_dataset, test_dataset = datasets

# 替换为回归任务适用的指标(比如MAE或R²)
metric = dc.metrics.Metric(dc.metrics.mean_absolute_error)

# 修正DTNNModel参数:n_tasks=1(单个回归任务),移除n_class参数
model = dc.models.DTNNModel(n_tasks=1)
model.fit(train_dataset, nb_epoch=50)

print('training set score:', model.evaluate(train_dataset, [metric]))
print('test set score:', model.evaluate(test_dataset, [metric]))

验证输出

运行测试代码后,prediction的每个样本输出应为1维(单个能量值),输入输出数量会匹配:

prediction = model.predict(test_dataset)
print(len(train_dataset.y))  # 5470
print(len(prediction))       # 684(和测试集样本数一致)
print(len(prediction[1]))    # 1(单个预测值)

关键修改点说明

  • 移除n_class参数:n_class仅用于分类任务,回归任务不需要该参数,设置后会触发分类逻辑,导致与连续标签y冲突,引发ValueError。
  • n_tasks设为1:QM7每个样本仅需预测一个能量值,n_tasks对应任务数量,而非输入特征维度。
  • 更换评估指标:回归任务应使用如平均绝对误差(MAE)、R²分数等回归指标,而非分类任务的ROC-AUC。

内容的提问来源于stack exchange,提问作者Firestorm-U23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:30:53