基于Pytorch的卷积神经网络CNN实例应用及详解

基于Pytorch的卷积神经网络CNN实例应用及详解

一、卷积神经网络CNN定义

卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的。在短时间内,它们变成了一种颠覆性的技术,打破了从文本、视频到语音等多个领域所有最先进的算法,远远超出了其最初在图像处理的应用范围。CNN 由许多神经网络层组成。卷积和池化这两种不同类型的层通常是交替的。网络中每个滤波器的深度从左到右增加。最后通常由一个或多个全连接的层组成。

基于Pytorch的卷积神经网络CNN实例应用及详解

; 二、卷积神经网络CNN的原理

三、卷积神经网络CNN实现的前期准备

四、卷积神经网络CNN实现案例分析

  • 案例目的:是构造卷积神经网络模型训练后进行药物靶体交互的二分类(0和1)预测。
  • 数据集及格式说明:首先案例用到的所有数据集是来自KIBA 数据集,数据以txt文本数据存储。
  • 亲和矩阵数据集Y说明:亲和矩阵的维度是[229,2110],分别表示229种蛋白质和2110种药物分子,矩阵对应的数值表示对应蛋白质和药物分子交互的亲和性,若为”nan”表示无亲和性也就是后续分类为0,其余为1。
    基于Pytorch的卷积神经网络CNN实例应用及详解
  • 药物及其smiles序列数据集ligands_iso说明:药物名称序号和对应的结构smiles序列,以字典形式保存,长度是2111(表示有2111种药物)。
    基于Pytorch的卷积神经网络CNN实例应用及详解
  • 蛋白质及其sequences序列数据集proteins说明:蛋白质名称序号和对应的结构sequences序列,以字典形式保存,长度为229(表示有229种蛋白质)。
    基于Pytorch的卷积神经网络CNN实例应用及详解
  • 训练集train_fold_setting说明:数据维度是[5,19709],也就是分为五组,每组包含19709个数字,其中数字N表示为亲和矩阵数据集Y所有行列组合数目是483190(229*2110)种组合中按顺序排的第N组。
    基于Pytorch的卷积神经网络CNN实例应用及详解
  • 测试集test_fold_setting说明:数据维度是[19709],也就是只有一组,该组包含19709个数字,其中数字N表示为亲和矩阵数据集Y所有行列组合数目是483190(229*2110)种组合中按顺序排的第N组。
    基于Pytorch的卷积神经网络CNN实例应用及详解
  • DTI案例CNN模型搭建大致如下(具体实现细节可见后面的代码)
    基于Pytorch的卷积神经网络CNN实例应用及详解
  • Label encoding 说明:将药物分子和蛋白质的序列的各种字符用数字字符替换,便于后面的词嵌入操作。
  • Embedding layer 说明:将药物分子和蛋白质的数字序列进行词嵌入操作,也就是增加一维度表示,比如原来的维度是一维只有长度(药物分子初始设置为100,蛋白质初始设置为1000),增加宽度(宽度初始设置都为128)这一维度。 注意:卷积后长度宽度初始设置会变化
  • concatenation(串联)说明:将原本分开的每组药物分子特征和蛋白质序列特征拼接起来,也就是根据宽度相同将两者的长拼接起来,所以拼接的宽度不变,长度两者相加。

; 五、卷积神经网络CNN实现完整代码和结果

import torch as t
import pickle
import numpy as np
import json
import math
from torch import nn
import torch.nn.functional as F
from  sklearn.metrics import accuracy_score

def datatransform(data):
    drug = []
    protein = []
    for i in range(len(data)):
        drug.append(math.floor(data[i] / 229))
        protein.append((data[i] % 229))

    Y = pickle.load(open("E:/data/kiba/Y", "rb"), encoding='latin1')
    effective = []
    for i in range(len(data)):
        d = drug[i]
        p = protein[i]
        if np.isnan(Y[d][p]):
            effective.append(0)
        else:
            effective.append(1)

    effectives = t.LongTensor(effective)

    drugs = json.load(open("E:\data\kiba\ligands_iso.txt"))
    drug_smiles = []
    train_drug_smiles = []
    for d in drugs.values():
        drug_smiles.append(d)
    for td in range(len(drug)):
        train_drug_smiles.append(drug_smiles[drug[td]])

    proteins = json.load(open("E:\data\kiba\proteins.txt"))
    proteins_sequence = []
    train_protein_sequences = []
    for p in proteins.values():
        proteins_sequence.append(p)
    for tp in range(len(protein)):
        train_protein_sequences.append(proteins_sequence[protein[td]])

    CHARISOSMISET = {"#": 29, "%": 30, ")": 31, "(": 1, "+": 32, "-": 33, "/": 34, ".": 2,
                     "1": 35, "0": 3, "3": 36, "2": 4, "5": 37, "4": 5, "7": 38, "6": 6,
                     "9": 39, "8": 7, "=": 40, "A": 41, "@": 8, "C": 42, "B": 9, "E": 43,
                     "D": 10, "G": 44, "F": 11, "I": 45, "H": 12, "K": 46, "M": 47, "L": 13,
                     "O": 48, "N": 14, "P": 15, "S": 49, "R": 16, "U": 50, "T": 17, "W": 51,
                     "V": 18, "Y": 52, "[": 53, "Z": 19, "]": 54, "\\": 20, "a": 55, "c": 56,
                     "b": 21, "e": 57, "d": 22, "g": 58, "f": 23, "i": 59, "h": 24, "m": 60,
                     "l": 25, "o": 61, "n": 26, "s": 62, "r": 27, "u": 63, "t": 28, "y": 64}
    CHARISOSMILEN = 64
    drug_label_encoding = []

    def label_smiles(smiles):
        D = np.zeros(100)
        for i, ch in enumerate(smiles):
            if i < 100:
                D[i] = CHARISOSMISET[ch]
        return D.tolist()

    for l in range(len(train_drug_smiles)):
        label_smile = label_smiles(train_drug_smiles[l])
        drug_label_encoding.append(label_smile)

    CHARPROTSET = {"A": 1, "C": 2, "B": 3, "E": 4, "D": 5, "G": 6,
                   "F": 7, "I": 8, "H": 9, "K": 10, "M": 11, "L": 12,
                   "O": 13, "N": 14, "Q": 15, "P": 16, "S": 17, "R": 18,
                   "U": 19, "T": 20, "W": 21,
                   "V": 22, "Y": 23, "X": 24,
                   "Z": 25}
    CHARPROTLEN = 25
    protein_label_encoding = []

    def label_sequece(sequence):
        P = np.zeros(1000)
        for i, ch in enumerate(sequence):
            if i < 1000:
                P[i] = CHARPROTSET[ch]
        return P.tolist()

    for l in range(len(train_protein_sequences)):
        label_protein = label_sequece(train_protein_sequences[l])
        protein_label_encoding.append(label_protein)

    t.manual_seed(100)

    drug_label_encodings = t.LongTensor(drug_label_encoding)
    drug_embedding = nn.Embedding(100, 128, padding_idx=0)
    drug_embeddings = drug_embedding(drug_label_encodings)

    protein_label_encodings = t.LongTensor(protein_label_encoding)
    protein_embedding = nn.Embedding(1000, 128, padding_idx=0)
    protein_embeddings = protein_embedding(protein_label_encodings)

    return drug_embeddings, protein_embeddings, effectives

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.cnn1 = nn.Sequential(
            nn.Conv1d(128, 32, 4, bias=False),
            nn.ReLU(inplace=True),
            nn.Conv1d(32, 64, 6, bias=False),
            nn.ReLU(inplace=True),
            nn.Conv1d(64, 96, 8, bias=False),
            nn.ReLU(inplace=True),
            nn.MaxPool1d(2, 1)
        )
        self.cnn2 = nn.Sequential(
            nn.Conv1d(128, 32, 4, bias=False),
            nn.ReLU(inplace=True),
            nn.Conv1d(32, 64, 8, bias=False),
            nn.ReLU(inplace=True),
            nn.Conv1d(64, 96, 12, bias=False),
            nn.ReLU(inplace=True),
            nn.MaxPool1d(2, 1)
        )
        self.mtp = nn.Sequential(
            nn.Linear(101952,1024),
            nn.Dropout(0.1),
            nn.Linear(1024, 512),
            nn.Dropout(0.1),
            nn.Linear(512, 2)
        )

    def forward(self, drug ,protein):

        drug = drug.permute(0, 2, 1)
        protein = protein.permute(0, 2, 1)

        drug_cnn = self.cnn1(drug)
        protein_cnn = self.cnn2(protein)

        drug_pool = drug_cnn.permute(0, 2, 1)
        protein_pool = protein_cnn.permute(0, 2, 1)

        drug_target = t.cat((drug_pool, protein_pool), 1)

        drug_target = drug_target.view(256,1062*96)

        drug_target_mtp = self.mtp(drug_target)

        drug_target_mtp = t.FloatTensor(drug_target_mtp)
        return drug_target_mtp

train_folds = json.load(open("E:/data/kiba/folds/train_fold_setting.txt"))

loaders = t.utils.data.DataLoader(train_folds[0][:1024], batch_size=256, shuffle=False, drop_last=True)

epoch = 3
model = Net()

optimizer = t.optim.SGD(model.parameters(),lr=0.01)
for i in range(epoch):
    loss_sum = 0
    for train_datas in loaders:

        drug_embeddings, protein_embeddings, effectives = datatransform(train_datas)

        output = model(drug_embeddings, protein_embeddings)

        loss = F.nll_loss(output,effectives)

        optimizer.zero_grad()

        loss.backward(retain_graph=True)

        optimizer.step()

    print("第" + str(i+1) + "轮训练")

test_folds = json.load(open("E:/data/kiba/folds/test_fold_setting.txt"))

loaderstest = t.utils.data.DataLoader(test_folds, batch_size=256, shuffle=False, drop_last=True)
pre_output = []
real_effectives = []
for test_datas in loaderstest:

    drug_embeddings, protein_embeddings, effectives = datatransform(test_datas)
    effectives = effectives.tolist()

    real_effectives = real_effectives + effectives

    output = model(drug_embeddings, protein_embeddings)
    output = output.tolist()

    for i in range(len(test_datas)):
        pre_output.append(output[i].index(max(output[i])))

print(pre_output)
print(real_effectives)
print("DTI预测正确率:")
print(accuracy_score(real_effectives, pre_output))

基于Pytorch的卷积神经网络CNN实例应用及详解

六、基于Pytorch的卷积神经网络CNN实例应用及详解2.0

点击打开《基于Pytorch的卷积神经网络CNN实例应用及详解2.0》文章

Original: https://blog.csdn.net/rothschild666/article/details/124204724
Author: rothschildlhl
Title: 基于Pytorch的卷积神经网络CNN实例应用及详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/709731/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • pytorch–多分类问题

    本人也是小白一枚,主要是边学习边记录,打算把一些学到的算法整理一下,方便以后回顾。如果有不对的地方,希望大家指证,一起共同成长。 目标:利用BP神经网络解决多分类问题库:pyorc…

    人工智能 2023年7月2日
    0113
  • Pycharm安装numpy失败

    在使用Pycharm下载numpy库时,可能会出现以下错误: 这种情况主要是两种思路: 第一种方法是查看是否pip版本是否正确,具体操作方法可以参照这篇博客:PyCharm安装库n…

    人工智能 2023年7月6日
    059
  • 目标检测之anchor free

    目标检测之anchor free 2022.2 CornerNet CenterNet ExtremeNet FCOS FoveaBox RepPoints ATSS LSNet …

    人工智能 2023年7月9日
    097
  • CMAKE 编写 FindXXX.cmake

    首先为什么要写 FindXXX.cmake 对于一个大型项目,作为一个合格的开发人员来说,特别是C/C++开源人员。会一门编译工具非常重要。在一个大型项目中,使用过Makefile…

    人工智能 2023年6月10日
    077
  • torch.nn.Softmax(dim=0,1,2)

    文章目录 1.基础概念讲解 * 1.1 softmax函数 1.2 softmax函数计算方法 1.3 softmax函数公式 1.4 softmax函数项目代码展示 2.测试代码…

    人工智能 2023年6月30日
    076
  • 反卷积(Transposed conv deconv)实现原理(通俗易懂)

    什么是卷积 卷积就是把卷积核放在输入上进行滑窗,将当前卷积核覆盖范围内的输入与卷积核相乘,值进行累加,得到当前位置的输出,其本质在于融合多个像素值的信息输出一个像素值,本质上是下采…

    人工智能 2023年6月16日
    0132
  • AdamW优化器(自适应梯度方法)

    DECOUPLED WEIGHT DECAY REGULARIZATION解耦权值衰减正则化 摘要 L2正则化和权值衰减正则化对于标准随机梯度下降是等价的(当按学习率重新调整时),…

    人工智能 2023年7月13日
    0160
  • 决策树的预剪枝

    决策树的预剪枝 优秀的决策树: 优秀的决策树不仅对数据具有良好的拟合效果,而且对未知的数据具有良好的泛化能力,优秀的决策树具有以下优点: 深度小 叶节点少 *深度小并且叶节点少 拟…

    人工智能 2023年6月16日
    0166
  • 传统语音增强——基本的维纳滤波语音降噪算法

    一、维纳滤波的基本原理基本维纳滤波就是用来解决从噪声中提取信号问题的一种过滤(或滤波)方法。它基于平稳随机过程模型,且假设退化模型为线性空间不变系统的。实际上这种线性滤波问题,可以…

    人工智能 2023年7月26日
    096
  • yolov4环境配置(cpu版)

    前景提要:如果有任何error解决不了建议全部卸载重新来哦! 1.安装anaconda,这个从官网下载安装即可,安装的时候记得要把添加环境变量勾选上,不然后面的操作会比较复杂 2….

    人工智能 2023年5月25日
    067
  • K-BERT,KnowBERT,KEPLER,KELM,K-Adapter,CoLAKE_biji

    K-BERT: Enabling Language Representation with Knowledge Graph. 对于每个句子抽取出三元组 ,构建sentence tr…

    人工智能 2023年6月4日
    084
  • Pytorch学习01-训练图像分类器

    提示:本篇博客主要是记录pytorch的学习过程,当作是一个笔记来使用。本篇内容:训练图像分类器,步骤如下: 使用torchvision加载并标准化 CIFAR10 训练和测试数据…

    人工智能 2023年7月2日
    072
  • corrplot包画相关性图详解

    获取更多R语言知识,请关注公众号: 医学和生信笔记 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床…

    人工智能 2023年7月15日
    0208
  • 时间序列 工具库学习(11) Darts模块-N-BEATS模型

    1.导库 N-BEATS是一个最先进的模型,它展示了时间序列预测背景下纯深度学习架构的潜力。它在M3和M4比赛中优于成熟的统计方法。有关模型的更多详细信息,请参见:论文 from …

    人工智能 2023年7月7日
    071
  • 端到端的多任务感知网络:目标检测、车道线、freespace,性能优于YOLOP。HybridNets: End-to-End Perception Network

    端到端的多任务感知网络:目标检测、车道线、freespace,性能优于YOLOP,速度可实时。论文 HybridNets: End-to-End Perception Networ…

    人工智能 2023年6月10日
    066
  • 图数据库之间的差异

    偶尔接触了图数据库的相关知识,下面是整理列出的在评估图数据库时应考虑的因素: 属性图或RDF存储:RDF存储是专用图数据库;属性图是通用图数据库。如果您的数据为纯RDF,您的查询仅…

    人工智能 2023年6月10日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球