循环神经网络(RNN)

循环神经网络RNN能处理时间序列,过去几年中,应用 RNN 在语音识别,语言建模,翻译,图片描述等问题上已经取得一定成功,并且这个列表还在增长。RNN模型的一个代表是LSTM ,这是一种特别的 RNN,比标准的 RNN 在很多的任务上都表现得更好,因此获得了非常多的应用。值得一提的是,lstm的作者也Jürgen Schmidhuber 也是机器学习领域的大牛,名气比三巨头稍微低一些。该大牛和GAN的发明者Ian Goodfellow 之间有些互怼冲突,感兴趣的朋友可以查看这个文章从PM到GAN——LSTM之父Schmidhuber横跨22年的怨念(文字版) 。

双向循环神经网络(BRNN)

RNN和LSTM都只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅和之前的状态有关,还可能和未来的状态有关系。比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。BRNN有两个RNN上下叠加在一起组成的,输出由这两个RNN的状态共同决定。因此BRNN是综合前后的信息来训练模型,在DNA结构预测等应用很多。关于BRNN可以参考这篇文章通俗易懂理解——双向LSTM.

使用双向LSTM预测DNA序列

将DNA序列用one_hot编码后,使用lstm和卷积神经网络连用可以用来预测DNA的功能,本代码试图复制论文“DanQ: a hybrid convolutional and recurrent deep neural network for quantifying the function of DNA sequences (Nucleic Acids Research, 2016, Vol. 44, No. 11 e107)“的网络结构,供感兴趣大家参考。one-hot编码请看本人文章字符串(如DNA序列,蛋白质序列)的编码和用于机器学习和神经网络
网络结构:

代码:

import tensorflow as tf
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
import numpy as np
from scipy import sparse
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0"#导入要训练的数据
allmatrix = sparse.load_npz('allmatrix_sparse.npz').toarray().astype('float32') # 稀疏矩阵存储的数据
allmatrix = allmatrix.reshape(21030, 2000, 4) # one-hot编码
target = np.load('target.txt.npy')x = tf.convert_to_tensor(allmatrix)
y = tf.convert_to_tensor(target, dtype=tf.int32)# 分训练集,验证集,测试集(70:10:20)
idx = tf.range(allmatrix.shape[0])
idx = tf.random.shuffle(idx)
x_train, y_train = tf.gather(x, idx[:int(0.7 * len(idx))]), tf.gather(y, idx[:int(0.7 * len(idx))])
x_val, y_val = tf.gather(x, idx[int(0.7 * len(idx)):int(0.8 * len(idx))]), tf.gather(y, idx[int(0.7 * len(idx)):int(0.8 * len(idx))])
x_test, y_test = tf.gather(x, idx[int(0.8 * len(idx)):]), tf.gather(y, idx[int(0.8 * len(idx)):])batchsz = 256db = tf.data.Dataset.from_tensor_slices((x_train, y_train))
db = db.shuffle(6000).batch(batchsz).repeat()
db_val = tf.data.Dataset.from_tensor_slices((x_val, y_val))
db_val = db_val.batch(batchsz)
db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.batch(batchsz)#构建双向LSTM
forward_lstm = layers.LSTM(320, return_sequences=True, unroll=True) # go_backwards 默认为false
backward_lstm = layers.LSTM(320,go_backwards=True,return_sequences=True, unroll=True)# 注意前后lstm的 go_backwards 必须设置不同,一个为false一个为truebrnn = layers.Bidirectional(forward_lstm,merge_mode='concat',backward_layer=backward_lstm)# 构建全局网络,包含卷积层,池化层,双向LSTM层
network = Sequential([layers.Conv1D(320, kernel_size=26, padding='valid', activation=tf.nn.relu), #1D卷积layers.MaxPooling1D(13, 13), # 1D 池化层layers.Dropout(0.2),brnn, # 双向lstmlayers.Flatten(),layers.Dense(64, activation=tf.nn.relu), layers.Dropout(0.4),layers.Dense(1, activation='sigmoid')])
# 查看网络结构
network.build(input_shape=(None, 2000, 4))
network.summary()# 编译网络
network.compile(optimizer=optimizers.Adam(lr=0.5),loss=tf.keras.losses.BinaryCrossentropy(),metrics=['accuracy'])
# 训练网络
network.fit(db, epochs=200, validation_data=db_val,validation_steps=2, steps_per_epoch=x_train.shape[0]//batchsz)# 测试网络
network.evaluate(db_test)

Tensorflow 使用Bidirectional()包装器构建双向LSTM模型,预测DNA序列功能相关推荐

  1. 猿创征文丨深度学习基于双向LSTM模型完成文本分类任务

    大家好,我是猿童学,本期猿创征文的第三期,也是最后一期,给大家带来神经网络中的循环神经网络案例,基于双向LSTM模型完成文本分类任务,数据集来自kaggle,对电影评论进行文本分类. 电影评论可以蕴含 ...

  2. 深度学习基于双向 LSTM 模型完成文本分类任务

    大家好,本期给大家带来神经网络中的循环神经网络案例,基于双向LSTM模型完成文本分类任务,数据集来自kaggle,对电影评论进行文本分类. 电影评论可以蕴含丰富的情感:比如喜欢.讨厌.等等.情感分析( ...

  3. LSTM模型、双向LSTM模型以及模型输入输出的理解

    循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息.然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限.这个问题就使得隐含 ...

  4. 深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网 ...

  5. 深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要 ...

  6. 【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型

    [火炉炼AI]机器学习006-用决策树回归器构建房价评估模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplo ...

  7. 【ML】基于机器学习的房价预测研究(系列7:双向LSTM模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 本次实战的项目是:基于机器学习的房价预测研究(附完整代 ...

  8. 使用深度双向LSTM模型构造社区问答系统

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 关于社区问答系统的问题背景,我们在之前的"利用卷积神经网络构造社区问答系统"一文里 ...

  9. 时间序列深度学习:状态 LSTM 模型预测太阳黑子

    目录 时间序列深度学习:状态 LSTM 模型预测太阳黑子 教程概览 商业应用 长短期记忆(LSTM)模型 太阳黑子数据集 构建 LSTM 模型预测太阳黑子 1 若干相关包 2 数据 3 探索性数据分析 ...

最新文章

  1. 《JUnit实战(第2版)》—第2章2.4节用Suite来组合测试
  2. Pat乙级 1038 统计同成绩学生
  3. PAT甲级1048 Find Coins :[C++题解]哈希表、两个硬币之和为定值
  4. 什么是元宇宙?为何要关注它?
  5. Python里的map、reduce、filter、lambda、列表推导式
  6. 【操作系统复习】中断和异常
  7. SpringMVC 集成 mybatisPlus
  8. 利用Octopress搭建一个Github博客
  9. MyBatis中使用LIKE关键字模糊查询
  10. javaWeb三大框架总结
  11. C#中反射的使用(How to use reflect in CSharp)(3)Emit的使用
  12. foxmail邮件加载失败重试_Foxmail提示错误的解决方案
  13. JavaScript BOM基础
  14. poj2054 Color a Tree
  15. Linux - 虚拟网络设备- TUN,TAP,ip tunnel
  16. jetson nano使用python读取解析GPS数据(GPRMC,GPGGA)。
  17. php下载安装教程,PHP for Windows安装图文详细教程
  18. 0基础学SQL-Task02 SQL基础查询与排序(共7节)
  19. android ppt 转图片显示不全,ppt转pdf图片显示不全怎么办 这两种方法供您参考
  20. 专访:InMobi全球CEO Naveen Tewari

热门文章

  1. QT帮助文档搜索不到任何东西
  2. 评选进行时丨线上投票结束,专家评审登场!
  3. 模糊PID(重心法解模糊梯形图FC)
  4. 哈工大计算机学院2020复试分数线,2020考研分数线:哈尔滨工业大学2020年复试基本分数线公布!...
  5. Flutter 2.2 现已发布!
  6. 协程的概念,为什么要用协程,以及协程的使用
  7. 超级管理器Android,超级文件管理器官方最新版下载
  8. java 视频解析_ffmpeg解析视频的每一帧(java )
  9. 深度学习(波士顿房价预测)
  10. PHP接口开发常规加密办法