Pytorch实现玉米基因表达量预测模型

news2024/11/20 16:26:59

一、实验要求

        通过搭建残差卷积网络,实现对玉米基因表达量的预测

二、实验目的

 

  1. 理解基因表达量预测问题:基因表达预测是生物信息学和基因组学领域中的重要任务之一,促进学科交叉融合。
  2. 熟悉深度学习框架PyTorch:通过实现基因表达量预测模型,学习如何使用PyTorch构建、训练和评估深度学习模型。
  3. 掌握处理基因表达数据的基本技术:包括数据预处理、模型设计、训练和评估等。

三、实验过程

 

1.搭建模型

模型结构如下:

a2cb11ec52e34866ab6b361796bd3434.png

        使用PyTorch定义了一个用于回归任务的神经网络模型。模型结构是一个卷积神经网络(CNN),先在一个数据集上进行训练,使用均方误差损失,并在验证集上监控训练进度。最后,在测试集上评估模型性能,计算皮尔逊相关系数和R平方等性能指标。下面对代码进行解读:

BasenjiModel类:定义了基因表达量预测模型。

        其包含多个卷积块、池化层、批归一化、Dropout等层的堆叠,以及GELU激活函数。

 c8ebe6a9d04f4a90bf249ef6fcc5b2a9.png

初始化方法‘__init__’:定义了模型的结构和超参数。

        输入参数包括目标数量、输入通道数量,以及多个卷积块的相关参数。

        其中,conv1kc, conv2kc, conv3kc是卷积核数量,conv1ks, conv2ks, conv3ks是卷积核大小,conv1st, conv2st, conv3st是步幅,conv1pd, conv2pd, conv3pd是填充,pool1ks, pool2ks, pool3ks是池化大小,pdrop1, pdrop2, pdrop3是丢弃率。

        convdc是扩张卷积块数量,convdkc是扩张卷积核数量,convdks是扩张卷积核大小

 3a10322de9fa40b9987ab287f406feee.png

 

卷积块(conv_block_1, conv_block_2, conv_block_3):

每个块包括 GELU 激活、卷积、批归一化、最大池化和丢弃层。

6d5ab150241f4347afc48ce6c959db91.png

扩张卷积块 (self.dilations):

        通过循环创建了多个扩张卷积块,每个块包括扩张卷积、批归一化、GELU激活、1*1卷积、批归一化和丢弃层。

ac83165d95ef436693f42905d61d4900.png

线性层 (conv_block_5):

        这部分包括 GELU 激活、Flatten 操作、线性层和丢弃。用于将卷积块的输出映射到目标数量。

 bd0bcb0ed2634ff78c9ca7904f431caa.png

truncated_normal方法:使用正态分布初始化权重

Forward方法:前向传播,接受一个输入序列,通过卷积块和扩张卷积块,返回最终的输出

Compile方法:将模型移动到指定的设备

 60210f2a132a4b6ba84eebf82b073b13.png

MyDataset类:加载数据集,从指定目录中的文件中读取数据 

d2a3be1b86c84faab9d979e2f4a3ca2f.png

__init__ 方法:

首先,循环遍历路径下的所有文件,每个文件包含两个 NumPy 数组,一个用于输入 'arr_0',一个用于标签 'arr_1'。将所有输入和标签张量连接成一个大的张量,作为数据集的输入和标签

2ffe7a403e7542fc8eb8194e6e3b18b6.png 

 

__getitem__ 方法:返回一个元组,包含索引对应位置的输入张量和标签张量,用于按索引获取数据集中的单个样本

__len__ 方法:返回数据集的长度

8a732ed1618b4de38d4ede822f4f487b.png

        训练过程:对模型进行多个epoch的训练,并在每个epoch结束时用验证集对模型进行评估

设置超参:训练总轮数:EPOCH=10,每个批次的样本数量:BATCH_SIZE=32

用MyDataset类加载需使用的数据

        其中,shuffle=True 表示在每个 epoch 开始时是否打乱数据

 08093a7e01e14d53b9fe647d914eed2c.png

        在训练循环中,用tqdm创建进度条将训练进程可视化

        在训练batch时,首先将图像和标签传输到指定device,然后清空模型的梯度,接着对模型进行前向推理,计算损失,随后进行反向传播,更新模型的参数,并用进度条显示进程完成度。

 ddc88bdf1a7b4b59892a0470cb2a7f65.png

        如果当前epoch是最后一个batch,将进行验证集评估

        先关闭模型的训练状态,避免模型权重更新。随后对验证集的DataLoader进行迭代,过程和训练过程类似,将输入和标签移动到指定设备,随后进行前向传播计算验证损失,记录验证损失和验证Pearson相关系数,接着更新进度条,显示当前epoch的训练损失、验证损失和验证pcc。

548e6418d2fd4bb2b35d2cb6424d665b.png

 

模型评估:

        首先,将模型设置为评估模式,不更新权重。然后对测试集DataLoader进行迭代,通过前向传播,得到模型对测试集的预测。随后,计算测试集的皮尔逊相关系数和R平方评价模型,并打印出,画出测试集上真实值和预测值之间的散点图。

f69522dd9b2a4ec0abf7e0a632cd7a98.png

2)运行程序

在itc平台上,按要求将训练集、验证集和测试集数据放到对应文件夹中运行程序

解压相关数据文件

dd6b8b0372ac4062aa404e14eca0ced2.png

c1a6812c0c8144f4b402221ce4a6103e.png

运行程序后报错,显示当前服务器内存不够

 61cba0527d114893a999876c61da8391.png

使用内存更大的服务器再次运行程序 

53c88d4067ac41ad8a8cc0bf3edd5a38.png

551e67497e2d446ea6111815dce48aa4.png

四、实验结果 

本实验中的相关数据

num_targets=1,n_channel=4

conv_block_1, conv_block_2, conv_block_3,conv_block_4,conv_block_5共五个卷积块

EPOCH=10,BATCH_SIZE=32

运行结果:

fc23a8e1a7c54b77b13d3d52e1cb3333.png

五、实验总结

        在这次实验中,我了解了玉米基因表达量的预测任务,并通过残差卷积网络的搭建完成这一任务。实验中使用的网络结构为CNN,其中包括卷积层、批归一化层、激活函数和残差连接。模型能够捕获基因序列中的关键特征,从而实现对表达量的准确预测。

        这次对实验代码并没有过多的修改,主要是理解程序流程等,加深将模型应用到实际问题的理解。在运行程序时遇到了之前实验中并没有出现的服务器内存不够的情况,也通过向有经验同学请教,学会了使用其他服务器,完成程序运行。这也让我更熟悉服务器的使用,比如如何上传数据,如何连接服务器等等,学到了很多有用的方法。并且,我也认识到基因表达量预测是一个具有挑战性的任务,不仅需要深度学习模型的灵活运用,还需要对生物学背景的理解。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2185694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第453题最小操作次数使数组元素相等

题目&#xff1a; 题解&#xff1a; func minMoves(nums []int) (ans int) {min : nums[0]for _, num : range nums[1:] {if num < min {min num}}for _, num : range nums {ans num - min}return }

nodejs --- 使用全球公认头像gravatar

目录 历史&#xff1a;阿凡达 什么是头像&#xff1f; 我为什么要添加 Gravatar&#xff1f; 我怎样才能得到一个Gravatar&#xff1f; 开发者使用 功能描述 安装和使用 实践应用 我们他们名字旁边的灰色图标是怎么出现的。那么这个灰色图标被称为“神秘人”gravatar。…

IT新秀系列:Go语言的兴起

Go语言&#xff08;Golang&#xff09;由谷歌于2007年发起&#xff0c;并于2009年正式开源。它的诞生背景可以追溯到互联网技术的高速发展时期。那时&#xff0c;软件开发面临着多核计算、大规模并发处理、部署和维护效率低下等挑战。作为一种新型的编程语言&#xff0c;Go主要…

Nginx基础详解5(nginx集群、四七层的负载均衡、Jmeter工具的使用、实验验证集群的性能与单节点的性能)

续Nginx基础详解4&#xff08;location模块、nginx跨域问题的解决、nginx防盗链的设计原理及应用、nginx模块化解剖&#xff09;-CSDN博客 目录 14.nginx集群&#xff08;前传&#xff09; 14.1如何理解单节点和集群的概念 14.2单节点和集群的比较 14.3Nginx中的负载均衡…

指纹定位的原理与应用场景

目录 原理 1. 信号特征收集 2. 定位算法 推导公式 距离估算公式 定位算法公式 使用场景 发展前景 指纹定位是一种基于无线信号强度(如Wi-Fi、RFID、蓝牙等)来实现室内定位的技术。它借助于环境中多个基站的信号特征来推断用户的位置。以下是对指纹定位的详细讲解,包…

Spring Boot技术交流平台的设计与实践

3 系统分析 3.1 可行性分析 为了研究问题并确定问题是否能够在最短的时间内以最低的成本解决&#xff0c;经过对该项目的详细调查研究&#xff0c;初步准备了系统的实施报告&#xff0c;面临的问题和解决方案在软件开发方面进行了初步设计和合理安排&#xff0c;确定了开发目标…

Geoserver关于忘记密码的解决方法

第一次安装后&#xff0c;如果你设置密码那一栏一直都是默认的话&#xff0c;那么登录密码应该是账户 admin&#xff0c;密码 geoserver 但是&#xff0c;如果你自己设置了密码和账户&#xff0c;登录又登录不上&#xff0c;或者忘记了&#xff0c;有以下方法可以解决。 本质…

Hive数仓操作(九)

一、Hive的DQL查询顺序 HQL语法基本上与传统的SQL一致&#xff0c;包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY和LIMIT等关键步骤 SELECT * -- 1. 选择所有列 FROM employees -- 2. 数据来源是 employees 表 WHERE salary > 3000 -- 3. 筛选工资大于 3000 的…

AI在医学领域:Arges框架在溃疡性结肠炎上的应用

溃疡性结肠炎&#xff08;UC&#xff09;是一种慢性炎症性肠病&#xff08;IBD&#xff09;&#xff0c;在全球大约影响着500万人&#xff0c;导致肠道炎症和溃疡。在UC的临床试验中&#xff0c;通常通过内窥镜视频来评估结肠疾病的严重程度&#xff0c;并使用如Mayo内窥镜下分…

leetcode_198_打家劫舍

思路&#xff1a;首先定义一个数组对于dp[i]读作1->i能获取的最大利益&#xff0c;第i个房屋只有"偷"和不"偷"两种情况&#xff0c;分别进行讨论 "偷": 既然"偷"了 i那就肯定不能偷i-1了,但是为了使"偷"的尽可能多除了必…

Microsoft 解釋修改後的 Recall 將如何保障隱私與安全

Microsoft 為 Copilot AI 電腦推出的 Recall 功能&#xff0c;本意是藉由定期進行螢幕截圖&#xff0c;並分析上面的資訊&#xff0c;來協助用戶找到查看過的網頁、工作過的文件等各種資訊。然而雖然立意很好&#xff0c;但 Microsoft 推出之初似乎完全沒有考慮到用戶的隱私安全…

多区域OSPF路由协议

前言 之前也有过关于OSPF路由协议的博客&#xff0c;但都不是很满意&#xff0c;不是很完整。现在也是听老师讲解完OSPF路由协议&#xff0c;感触良多&#xff0c;所以这里重新整理一遍。这次应该是会满意的 一些相关概念 链路状态 链路指路由器上的一个接口&#xff0c;链路状…

Pikachu-Cross-Site Scripting-DOM型xss

DOM型xss DOM型XSS漏洞是一种特殊类型的XSS,是基于文档对象模型 Document Object Model (DOM)的一种漏洞。是一个与平台、编程语言无关的接口&#xff0c;它允许程序或脚本动态地访问和更新文档内容、结构和样式&#xff0c;处理后的结果能够成为显示页面的一部分。 dom就是一…

【微服务】初识(day1)

基础概念 集群 集群是将一个系统完整的部署到多个服务器&#xff0c;每个服务器提供系统的所有服务&#xff0c;多个服务器可以通过负载均衡完成任务&#xff0c;每个服务器都可以称为集群的节点。 分布式 分布式是将一个系统拆分为多个子系统&#xff0c;多个子系统部署在…

LeetCode[中等] 279.完全平方

给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 不是。 1…

【转载翻译】消息队列 - ActiveMQ、RabbitMQ、Kafka、ZeroMQ

转载自本人博客&#xff1a;【转载翻译】消息队列 - ActiveMQ、RabbitMQ、Kafka、ZeroMQ 转载自&#xff1a;The System Design Cheat Sheet: Message Queues - ActiveMQ, RabbitMQ, Kafka, ZeroMQ 本文由 Aleksandr Gavrilenko 发布于2023年12月21日 1. 前言 消息队列是异步服…

NASA:ATLAS/ICESat-2 L3B 平均内陆地表水数据 V002

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Mean Inland Surface Water Data V002 ATLAS/ICESat-2 L3B 平均内陆地表水数据 V002 简介 ATLAS/ICESat-2 L3B Mean Inland Surface Water Data V002是由NASA的ICESat-2 (Ice,…

JavaScript break与continue语句

break语句和continue语句都具有跳转作用&#xff0c;可以让代码不按既有的顺序执行。 break break语句用于跳出代码块或循环 for(i0;i<100;i){if(i5){break;}console.log(i);} continue continue语句用于应即终止本轮循环,返回循环结构的头部&#xff0c;开始下一轮循环。…

【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】

目录 stm32cubemx配置芯片选择工程配置stm32基础配置SPI的配置定时器的配置ADC的配置中断优先级的配置生成工程 工程代码编写FOC代码结构搭建电机编码器角度读取PWM产生FOC开环代码编写确定电机正负旋转方向电机旋转速度计算多圈逻辑角度电流采样极对数转子角度确定 闭环控制控…

两个月冲刺软考——网络与信息安全知识

1. 什么是网络监听&#xff1f; 网络监听是主机的一种工作模式&#xff0c;在这种模式下&#xff0c;主机可以接收到本网段在同一条物理通道上传输的所有信息。 2. 客户端与服务器建立连接的步骤 域名解析 建立TCP连接 发送HTTP请求 服务器处理请求 发送HTTP响应 客户端…