IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 2021SC@SDUSC软件工程应用与实践----原码中CNN模块分析 -> 正文阅读

[人工智能]2021SC@SDUSC软件工程应用与实践----原码中CNN模块分析

2021SC@SDUSC

一,简述:

在对数据集进行标准化处理之后,第一步就是通过CNN学习化合物和药物的特征,因此要分析这部分需要CNN相关知识,接下来将分为

1,CNN综述

2,实验分析

3,原码分析

三个部分。

二,CNN综述

1,概念

卷积神经网络(Convolutional Neural Network, CNN) 是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,[1]对于大型图像处理有出色表现。 卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,[2]卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型[3]也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

?2,基本流程

?

?3,基本计算

? ①卷积

?②池化

???③全联结

4,损失函数

①最小二乘法

?②极大似然估计法

?③交叉熵(计算思路和极大似然估计法不同,但化简后公式一致)

?5,反向传播

使用方法:梯度下降法

①梯度定义

?②层次分析

下面展示了如何从最后一层,依次修改上一层的参数,直到第一层

主要分为三种情况。

1)output->l层

?2)l层->l-1层

3)2层->1层

??

三,试验分析

试验流程图如下,这里我们仅关注红色框的内容

本次试验引入了两个CNN模块,每个块都旨在从 SMILES 字符串和蛋白质序列中学习表示。对于每个 CNN 块,我们使用了三个连续的 1D 卷积层,并增加了过滤器的数量。 第二层有两倍,第三层卷积层的过滤器数量是第一层的三倍。 卷积层之后是最大池化层。 最大池化层的最终特征被连接并馈入三个 FC 层。

本次试验使用了两个数据集合的输入:

Davis 数据集:输入为化合物和蛋白质的 (85,128) 和 (1200, 128) 维矩阵。

KIBA 数据集:输入为化合物的 (100,128) 维矩阵和蛋白质的 (1000, 128) 维矩阵。

输出:

化合物和蛋白质矩阵卷积后的结果仍然是矩阵,连接后传下DeepDTA块中。

(截取自论文DeepDTA: Deep Drug-Target Binding Affinity Prediction )

?四,代码分析

1,读取蛋白质和化合物文件,并初始化为相应的矩阵

分析:两个read,分别读入蛋白质和化合物文件数据,if os.path.exists(XXX),判断文件是否存在,后面的if test,这里可以用是否使用test数据集,这里可以改成自己的其他数据集。

def prepare_new_data(fpath, test=True):

    prots = read_proteins(fpath)
    chems = read_chemicals(fpath)
    Y = np.zeros((len(chems), len(prots)))

    if  os.path.exists(fpath + AFF_FILE):
        Y = np.loadtxt(fpath + AFF_FILE)

    pickle.dump(Y, open(fpath + "Y","wb"), protocol=pickle.HIGHEST_PROTOCOL)
    label_row_inds, label_col_inds = np.where(np.isnan(Y)==False)

    #json.dump(linepos, open(FLAGS.test_path  + "csv_pos_match.txt","w"))
    indic = set(range(len(label_row_inds)))
    indic = sorted(indic, key=os.urandom)


    if not os.path.exists(fpath + "folds/"):
        os.makedirs(fpath + "folds/")
    if test:
        json.dump(indic, open(fpath + "folds/test_fold.txt","w"))
    else:
        json.dump(indic, open(fpath + "folds/train_fold.txt","w"))

2,读取化合物文件,得到一个化合物对象

分析:python语法with打开文件,用到了两个for循环遍历,对数据规范处理后其次填入矩阵中

def read_chemicals(datafolder):
    counter =0
    filepath = datafolder + CHEM_FILE
    chemicals = {}
    with open(filepath) as file:
         next(file)
         for row in file:
            chem_id = row.split('\t')[0]
            smiles = (row.split('\t')[1]).strip()
            chemicals[chem_id] = smiles
            counter +=1

    print("%d number(s) of chemical(s)" % counter)
    json.dump(chemicals, open(datafolder + 'ligands.txt', 'w'))

    return chemicals

3,读取蛋白质文件,得到一个蛋白质对象

?分析:和上文规范处理化合物对象操作一致

def read_proteins(datafolder):
    proteins = {}
    counter =0
    fa=""
    filename = datafolder + PROT_FILE
    print(filename)
    with open("C:\\Users\\86187\\Desktop\\DTI预测工作\\DeepDTA Deep Drug-Target Binding Affinity Prediction\\DeepDTA\\DeepDTA\\deepdta-toy\\data\\mytest\\"+filename) as f:
        fa = f.readlines()

    idindex=[]
    for i, line in enumerate(fa):
        if ">" in line:
            idindex.append(i)
    idindex.append(i)

    for i, idx in enumerate(idindex):

        if i < len(idindex)-1:
            idx1 = idindex[i+1]
            info = fa[idx].split()

            pid = info[0][4:10]
            seq = "".join(fa[idx+1:idx1])
            seq = seq.replace("\n","")
            proteins[pid] = seq
            counter +=1

    print("%d number(s) of protein(s)" % counter)
    json.dump(proteins, open(datafolder + 'proteins.txt', 'w'))

    return proteins

4,选定数据集,将化合物和蛋白质分别规范化成相应规格的矩阵

分析:调用内置的charseqset_size和charsmiset_size方法初始化FLAGS的charseqset_size和charsmiset_size参数。

?
    dataset = DataSet( fpath = FLAGS.train_path,
    				   fpath_test = FLAGS.test_path,
                      setting_no = FLAGS.problem_type, 
                      seqlen = FLAGS.max_seq_len,
                      smilen = FLAGS.max_smi_len,
                      need_shuffle = False )
    # set character set size
    FLAGS.charseqset_size = dataset.charseqset_size 
    FLAGS.charsmiset_size = dataset.charsmiset_size 

    #XD, XT, Y = dataset.parse_data(fpath = FLAGS.dataset_path)
    tr_XD, tr_XT, tr_Y, te_XD, te_XT, te_Y = dataset.parse_train_test_data(FLAGS)

    tr_XD = np.asarray(tr_XD)
    tr_XT = np.asarray(tr_XT)
    tr_Y = np.asarray(tr_Y)

    te_XD = np.asarray(te_XD)
    te_XT = np.asarray(te_XT)
    te_Y = np.asarray(te_Y)

?

5,部分运行结果

分析:

如图:训练药物数据集大小11902,蛋白质大小1353,本次测试用2批次的药物和2批次的蛋白质进行试验

五,总结

因为CNN提取特征仅为该项目的第一部分,且在计算之前,需要对数据进行处理,由于CNN本身系统知识比较多,本周主要花时间先去学习了CNN先关知识,而项目中本段仅为一个中间值,并未有太多过程结果的输出。

在接下来的博客中,将会对项目中更多的关键代码进行分析。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:51:15  更:2021-10-07 13:53:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:41:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码