尝试使用pytorch和RDKit构建QSAR模型

环境依赖

  1. pip install pprint

  2. pip install argparse

  3. #安装rdkit

  4. conda install -c rdkit rdkit

  5. #安装Pytorch

  6. conda install pytorch-cpu -c pytorch

基于Pytorch和RDKit的QSAR模型代码:

<阅读原文,代码效果更佳>

#!usr/bin/python3

import pprint

import argparse

import torch

import torch.optim as optim

from torch import nn as nn

import torch.nn.functional as F

from torch.autograd import Variable

from rdkit import Chem

from rdkit.Chem import AllChem

from rdkit.Chem import DataStructs

import numpy as np

#from sklearn import preprocessing

def base_parser():

parser = argparse.ArgumentParser("This is simple test of pytorch")

parser.add_argument("trainset", help="sdf for train")

parser.add_argument("testset", help="sdf for test")

parser.add_argument("--epochs", default=150)

return parser

parser = base_parser()

args = parser.parse_args()

traindata = [mol for mol in Chem.SDMolSupplier(args.trainset) if mol is not None]

testdata = [mol for mol in Chem.SDMolSupplier(args.testset) if mol is not None]

def molsfeaturizer(mols):

fps = []

for mol in mols:

arr = np.zeros((0,))

fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2)

DataStructs.ConvertToNumpyArray(fp, arr)

fps.append(arr)

fps = np.array(fps, dtype = np.float)

return fps

classes = {"(A) low":0, "(B) medium":1, "(C) high":2}

#classes = {"(A) low":0, "(B) medium":1, "(C) high":1}

trainx = molsfeaturizer(traindata)

testx = molsfeaturizer(testdata)

# for pytorch, y must be long type!!

trainy = np.array([classes[mol.GetProp("SOL_classification")] for mol in traindata], dtype=np.int64)

testy = np.array([classes[mol.GetProp("SOL_classification")] for mol in testdata], dtype=np.int64)

#在pytorch中构建模型,定义每个层和整个结构

X_train = torch.from_numpy(trainx)

X_test = torch.from_numpy(testx)

Y_train = torch.from_numpy(trainy)

Y_test = torch.from_numpy(testy)

print(X_train.size(),Y_train.size())

print(X_test.size(), Y_train.size())

class QSAR_mlp(nn.Module):

def __init__(self):

super(QSAR_mlp, self).__init__()

self.fc1 = nn.Linear(2048, 524)

self.fc2 = nn.Linear(524, 10)

self.fc3 = nn.Linear(10, 10)

self.fc4 = nn.Linear(10,3)

def forward(self, x):

x = x.view(-1, 2048)

h1 = F.relu(self.fc1(x))

h2 = F.relu(self.fc2(h1))

h3 = F.relu(self.fc3(h2))

output = F.sigmoid(self.fc4(h3))

return output

#构建训练和预测模型

model = QSAR_mlp()

print(model)

losses = []

optimizer = optim.Adam( model.parameters(), lr=0.005)

for epoch in range(args.epochs):

data, target = Variable(X_train).float(), Variable(Y_train).long()

optimizer.zero_grad()

y_pred = model(data)

loss = F.cross_entropy(y_pred, target)

print("Loss: {}".format(loss.data[0]))

loss.backward()

optimizer.step()

pred_y = model(Variable(X_test).float())

predicted = torch.max(pred_y, 1)[1]

for i in range(len(predicted)):

print("pred:{}, target:{}".format(predicted.data[i], Y_test[i]))

print( "Accuracy: {}".format(sum(p==t for p,t in zip(predicted.data, Y_test))/len(Y_test)))

测试模型

python qsar_pytorch.py solubility.train.sdf solubility.test.sdf


基于Pytorch和RDKit建立QSAR模型相关推荐

  1. RDKit | 基于Pytorch和RDKit建立QSAR模型

    QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法.所谓定量构效方法就是通过一些数理统计方法建立 ...

  2. python保存模型与参数_基于pytorch的保存和加载模型参数的方法

    当我们花费大量的精力训练完网络,下次预测数据时不想再(有时也不必再)训练一次时,这时候torch.save(),torch.load()就要登场了. 保存和加载模型参数有两种方式: 方式一: torc ...

  3. 【小白学习PyTorch教程】九、基于Pytorch训练第一个RNN模型

    「@Author:Runsen」 当阅读一篇课文时,我们可以根据前面的单词来理解每个单词的,而不是从零开始理解每个单词.这可以称为记忆.卷积神经网络模型(CNN)不能实现这种记忆,因此引入了递归神经网 ...

  4. Python基于PyTorch实现BP神经网络ANN分类模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...

  5. Python基于PyTorch实现BP神经网络ANN回归模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...

  6. 使用schrodinger建立深度学习QSAR模型

    使用schrodinger建立QSAR模型 本篇教程将展示如何使用AutoQSAR/DeepChem去设定,建立和理解深度学习QSAR/QSPR模型. 文章目录 使用schrodinger建立QSAR ...

  7. 银行股价预测——基于pytorch框架RNN神经网络

    银行股价预测--基于pytorch框架RNN神经网络 任务目标 数据来源 完整代码 流程分析 1.导包 2.读入数据并做预处理 3.构建单隐藏层Rnn模型 4.设计超参数,训练模型 5.加载模型,绘图 ...

  8. RDKit | 基于scikit-learn将pytorch用于QSAR模型构建

    将PyTorch用于深度学习框架.PyTorch非常灵活,并且有很多文章将其用于实现. 利用scikit-learn一样调用fit来训练pytorch模型,使用skorch可以使训练过程变得简单. s ...

  9. 基于Pytorch Mobile在安卓手机端部署深度估计模型

    基于Pytorch Mobile在安卓手机端部署深度估计模型 1.选取torch版本的深度估计模型 2.修改模型实现代码 3.Pytorch生成ptl模型 4.安卓端部署代码 5.实验配置 6.手机端 ...

最新文章

  1. python第一个公开发行版_Python基础篇【第一篇】:python入门
  2. 【经济法常识转摘】借款人逾期不还钱,利率如何确定?
  3. HTTP缓存与Spring示例
  4. numpy 中对axis参数的理解
  5. C++设计模式——观察者模式(转)
  6. 设计中最困难的部分是决定设计什么
  7. 第8.18节 Python类中内置析构方法__del__
  8. TrueType字体结构
  9. learn git branching学习整理
  10. 如何计算近似纳什均衡_网络与市场中的计算思维-5.博弈论的基本概念
  11. The 2018 ACM-ICPC Asia Shenyang Regional Contest
  12. 2022年8月及1-8月国内动力电池企业装车量排名:“宁王”第一,“迪王”猛追
  13. python3中多项式创建_Python3多项式
  14. 经典算法研究系列:七、深入浅出遗传算法
  15. java将秒转换为天,时,分
  16. PHP编辑器哪个好用些?
  17. flex弹性盒子flex-grow 和flex的区别
  18. 网络基础UDP实例(传一个long类型的值)
  19. 网站顶部的跑马灯特效代码
  20. mhd格式三维图像显示_关于医疗影像的mhd和dcm格式图像的读取和坐标转换

热门文章

  1. Java Properties 类读取配置文件信息
  2. 3w字带你揭开WebSocket的神秘面纱~
  3. 为什么你老是讲不清楚js的继承模式
  4. 每秒上千订单场景下的分布式锁高并发优化实践!
  5. 机房布线的至高境界,美到窒息!
  6. 创业3年!猎头加价50%!一半中层骨干被挖走,研发就剩2个应届生!绝户套餐真够狠的!...
  7. 手撕ArrayList底层,透彻分析源码
  8. 为什么微服务一定要有网关呢?
  9. 为了给你们讲清楚数据库中间件有哪些,我也是拼了!
  10. 【基础巩固篇】Java中String揭秘!