基于Pytorch和RDKit建立QSAR模型
尝试使用pytorch和RDKit构建QSAR模型
环境依赖
pip install pprint
pip install argparse
#安装rdkit
conda install -c rdkit rdkit
#安装Pytorch
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模型相关推荐
- RDKit | 基于Pytorch和RDKit建立QSAR模型
QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法.所谓定量构效方法就是通过一些数理统计方法建立 ...
- python保存模型与参数_基于pytorch的保存和加载模型参数的方法
当我们花费大量的精力训练完网络,下次预测数据时不想再(有时也不必再)训练一次时,这时候torch.save(),torch.load()就要登场了. 保存和加载模型参数有两种方式: 方式一: torc ...
- 【小白学习PyTorch教程】九、基于Pytorch训练第一个RNN模型
「@Author:Runsen」 当阅读一篇课文时,我们可以根据前面的单词来理解每个单词的,而不是从零开始理解每个单词.这可以称为记忆.卷积神经网络模型(CNN)不能实现这种记忆,因此引入了递归神经网 ...
- Python基于PyTorch实现BP神经网络ANN分类模型项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...
- Python基于PyTorch实现BP神经网络ANN回归模型项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...
- 使用schrodinger建立深度学习QSAR模型
使用schrodinger建立QSAR模型 本篇教程将展示如何使用AutoQSAR/DeepChem去设定,建立和理解深度学习QSAR/QSPR模型. 文章目录 使用schrodinger建立QSAR ...
- 银行股价预测——基于pytorch框架RNN神经网络
银行股价预测--基于pytorch框架RNN神经网络 任务目标 数据来源 完整代码 流程分析 1.导包 2.读入数据并做预处理 3.构建单隐藏层Rnn模型 4.设计超参数,训练模型 5.加载模型,绘图 ...
- RDKit | 基于scikit-learn将pytorch用于QSAR模型构建
将PyTorch用于深度学习框架.PyTorch非常灵活,并且有很多文章将其用于实现. 利用scikit-learn一样调用fit来训练pytorch模型,使用skorch可以使训练过程变得简单. s ...
- 基于Pytorch Mobile在安卓手机端部署深度估计模型
基于Pytorch Mobile在安卓手机端部署深度估计模型 1.选取torch版本的深度估计模型 2.修改模型实现代码 3.Pytorch生成ptl模型 4.安卓端部署代码 5.实验配置 6.手机端 ...
最新文章
- python第一个公开发行版_Python基础篇【第一篇】:python入门
- 【经济法常识转摘】借款人逾期不还钱,利率如何确定?
- HTTP缓存与Spring示例
- numpy 中对axis参数的理解
- C++设计模式——观察者模式(转)
- 设计中最困难的部分是决定设计什么
- 第8.18节 Python类中内置析构方法__del__
- TrueType字体结构
- learn git branching学习整理
- 如何计算近似纳什均衡_网络与市场中的计算思维-5.博弈论的基本概念
- The 2018 ACM-ICPC Asia Shenyang Regional Contest
- 2022年8月及1-8月国内动力电池企业装车量排名:“宁王”第一,“迪王”猛追
- python3中多项式创建_Python3多项式
- 经典算法研究系列:七、深入浅出遗传算法
- java将秒转换为天,时,分
- PHP编辑器哪个好用些?
- flex弹性盒子flex-grow 和flex的区别
- 网络基础UDP实例(传一个long类型的值)
- 网站顶部的跑马灯特效代码
- mhd格式三维图像显示_关于医疗影像的mhd和dcm格式图像的读取和坐标转换