Ascend-SACT/TextCNNModel
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

1. 模型概述

TextCNN是一个基于一维卷积神经网络的模型,专为处理SMILES字符串而设计,适用于分类和回归任务。该模型将输入的SMILES字符串转换为嵌入向量,通过一系列卷积滤波器进行卷积和池化,拼接后经过密集层和Highway层处理,最终根据任务类型通过密集层输出结果。

2. 准备运行环境

2.1 软件环境

组件版本
Python3.10.19
PyTorch2.1.0
torch_npu2.1.0.post13
CANN8.1.RC1

2.2 硬件环境

设备型号NPU 配置
Atlas 800T A2单卡

2.3 准备镜像

镜像环境镜像地址
公网swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.1.rc1-py_3.10-euler_2.10.11-aarch64-snt9b-20250603154214-4e60e43

2.4 启动镜像

IMAGE_ID=swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.1.rc1-py_3.10-euler_2.10.11-aarch64-snt9b-20250603154214-4e60e43
CONTAINER_NAME=textcnn
docker run -u root --privileged \
 --name ${CONTAINER_NAME} \
 --device /dev/davinci0 \
 --device /dev/davinci_manager \
 --device /dev/devmm_svm \
 --device /dev/hisi_hdc \
 -v /usr/local/dcmi:/usr/local/dcmi \
 -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
 -v /etc/ascend_install.info:/etc/ascend_install.info \
 -itd ${IMAGE_ID} /bin/bash

3 运行指导

3.1 创建环境

docker exec -it ${CONTAINER_NAME} bash
conda create -n molformer --clone PyTorch-2.1.0
conda activate textcnn

3.2 迁移适配

直接安装deepchem-ascend二进制包,模型已基于适配代码重新编译成二进制包上传pypi

pip install deepchem-ascend==0.0.6

3.3 测试示例

测试数据example_classification.csv存放于测试代码同级目录下。

import numpy as np
import os
import deepchem as dc
import torch
from deepchem.models.torch_models.text_cnn import default_dict, TextCNN
from deepchem.models.torch_models import TextCNNModel
import torch.nn as nn


np.random.seed(123)
n_tasks = 1
current_dir = os.path.dirname(os.path.abspath(__file__))

featurizer = dc.feat.RawFeaturizer()
tasks = ["outcome"]
input_file = os.path.join(current_dir, "example_classification.csv")
loader = dc.data.CSVLoader(tasks=tasks, feature_field="smiles", featurizer=featurizer)
dataset = loader.create_dataset(input_file)

classification_metric = dc.metrics.Metric(dc.metrics.accuracy_score)

char_dict, length = TextCNNModel.build_char_dict(dataset)
batch_size = 10

model = TextCNNModel(n_tasks,
    char_dict=char_dict,
    seq_length=length,
    batch_size=batch_size,
    learning_rate=0.001,
    use_queue=False,
    mode="classification",
    log_frequency=10)

# Fit trained model
model.fit(dataset, nb_epoch=200)

# Eval model on train
scores = model.evaluate(dataset, [classification_metric])

print(f"scores[classification_metric.name]: {scores[classification_metric.name]}")

model_device = next(model.model.parameters()).device
print(f"Model device: {model_device}")

assert model_device.type == 'npu', f"Model should be on NPU, but got {model_device}"
print("NPU test passed!")

3.4 运行测试代码

复制上述测试代码保存到test_textcnn.py

pytest test_textcnn.py

image