【多层RNN】keras创造多层RNN

2023-11-09

之前写简单的DNN demo就是复制粘贴模型,今天有时间系统得看了看构造的一些事情

问题describe

创建多层RNN网络,一开始用的是tf的tf.nn.rnn_cell.GRUCell, 但是报错如下

The added layer must be an instance of class Layer. Found: <tensorflow.python.ops.rnn_cell_impl.MultiRNN

原因

This won't work because a tensorflow.keras layer is getting added to a keras Model

创建模型时,embedding层用的是keras的库,而创建RNN时用的是tensorflow的库。

def my_emb_MultiGRU(max_len, m, layer_nums):
    # 用的是keras的
    model = ks.models.Sequential()
    model.add(ks.layers.Masking(mask_value=0, input_shape=(500,max_len)))
    
    # 用的是tensorflow的库
    cell_list = [tf.nn.rnn_cell.GRUCell(num_units=m) for _ in range(layer_nums)]
    multiRnn_layer = tf.nn.rnn_cell.MultiRNNCell(cell_list)
    model.add(multiRnn_layer)
    
    model.add(Dense(m, activation="relu", name="FC1"))
    model.add(Dropout(0.5))
    model.add(Dense(9, activation="softmax", name="FC2"))
    return model

修改策略

keras官网给出了两个实例:

基于栈式 LSTM 的序列分类以及"stateful" 渲染的的栈式 LSTM 模型   

根据RNN的特性以及本次实验需求,使用"stateful" 渲染的的栈式 GRU 模型

  有状态 (stateful) 的循环神经网络模型中,在一个 batch 的样本处理完成后,其内部状态(记忆)会被记录并作为下一个 batch 的样本的初始状态。这允许处理更长的序列,同时保持计算复杂度的可控性。

 

 

 

实现讲解

参考keras的官方文档

1 keras的sequence()创造多层网络

顺序模型是多个网络层的线性堆叠。

可以网络层实例的列表传递给 Sequential 的构造器,也可以通过add()来实现

注: 接受的模型,第一层需要接受参数(获取输入的尺寸)

顺序模型中的第一层(且只有第一层,因为下面的层可以自动地推断尺寸)需要接收关于其输入尺寸的信息

  • 传递一个 input_shape 参数给第一层。它是一个表示尺寸的元组 (一个由整数或 None 组成的元组,其中 None 表示可能为任何正整数)。在 input_shape 中不包含数据的 batch 大小。
  • 某些 2D 层,例如 Dense,支持通过参数 input_dim 指定输入尺寸,某些 3D 时序层支持 input_dim 和 input_length 参数。
  • 如果你需要为你的输入指定一个固定的 batch 大小(这对 stateful RNNs 很有用),你可以传递一个 batch_size 参数给一个层。如果你同时将 batch_size=32 和 input_shape=(6, 8) 传递给一个层,那么每一批输入的尺寸就为 (32,6,8)

 

2 keras的compile编译模型,配置学习过程

在训练模型之前,您需要配置学习过程,这是通过 compile 方法完成的。它接收三个参数:

  • 优化器 optimizer。它可以是现有优化器的字符串标识符,如 rmsprop 或 adagrad,也可以是 Optimizer 类的实例。详见:optimizers
  • 损失函数 loss,模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如 categorical_crossentropy 或 mse,也可以是一个目标函数。详见:losses
  • 评估标准 metrics。对于任何分类问题,你都希望将其设置为 metrics = ['accuracy']。评估标准可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。

3 fit函数训练

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【多层RNN】keras创造多层RNN 的相关文章

  • STOMP 客户端开发

    STOMP 客户端开发 需求 客户端需要彼此通信 如主持人需要能够控制所有客户端的第三方应用开启权限 主要问题 目前的c s模型中是客户端主动连接服务器 客户端发出请求 服务器给出响应 缺少信息主动从服务器流向客户端的流程 可选方案 在客户
  • pinctrl和gpio子系统

    一 pinctrl子系统简介 Linux驱动讲究驱动分离与分层 pinctrl和gpio子系统就是驱动分离与分层思想下的产物 pinctrl子系统主要工作内容如下 获取设备树中的pin信息 根据获取到的pin信息来设置pin的复用功能 根据
  • 一文快速了解进程、线程与协程

    进程与线程 进程是操作系统进行资源分配的基本单位 每个进程都有自己的独立内存空间 由于进程比较重量 占据独立的内存 所以上下文进程间的切换开销 栈 寄存器 虚拟内存 文件句柄等 比较大 但相对比较稳定安全 线程又叫做轻量级进程 是进程的一个

随机推荐

  • springboot 动态指定日志路径(logback) 自动跟随项目路径

    背景 项目 jar项目 开发时 日志文件输出路径配置的为相对路径 与项目src是同一个目录 问题 希望日志跟随jar文件目录生成 在项目部署 cmd 直接运行jar文件 时 如果在jar文件下启动 日志输出路径没有问题 与jar同一文件夹
  • Java开发面试常见问题总结

    1 JAVA的跨平台原理 JVA源码被编译会生成字节码文件 通过不同平台上下载的不同版本的JVM 将字节码文件翻译成对应的机器码 注意的是 跨平台的Java程序 不是JVM JVM是使用C C 开发的 是编译后的字节码 不能跨平台 2 JA
  • zb怎么做渲染图_zbrush高模效果图渲染技巧

    原标题 zbrush高模效果图渲染技巧 渲染是3D建模环节中不可缺少的一部分 今天我教大家用 zbrush 来渲染高模 什么是渲染高模 渲染的目的是为了更直观的体现整个模型立体感 通常我们会用灯光 阴影 明暗的光影关系去体现 甚至可以模拟真
  • Altium Designer 10 的原理图库,用Paste Array如何将引脚标号清零

    最近刚学这个AD10 在用Paste Array复制粘贴的时候碰见引脚编号清不了零的情况 先是通过删除 后面发现只会一直递增下去 而后回到上一步再用这个Paste Array粘贴 发现再之前删除的编号后继续增加 难道真的没有办法了吗 我于是
  • Ubuntu 18.04 安装Qt5.15.2开发环境

    1 下载Qt在线安装包 地址 Index of official releases online installers 选择Linux版本 右键复制链接地址 在Ubuntu终端 使用下载命令 wget 下载文件 wget https dow
  • Python入门学习系列(六)之列表常用功能及函数

    本节我们来学习一下Python里面除了数字和字符串之外用得最多的数据类型 列表 其实完全可以把列表类比于C CPP里面的数组 而且这个列表的涵盖范围更加广阔 在C CPP里面的数组每个存储单元只能够是数字 而列表中则可以是任意数据类型 包括
  • 【Arma3脚本教程】二、常用命令

    目录 常用命令 1 前言 2 常用命令 无敌 俘虏 目标对象 删除对象 返回位置 设置方向 单位名称 移动速度 3 总结 常用命令 1 前言 此章内容展示一些常用命令 如果你是服务器管理员的话 可以很方便的在游戏里执行代码 前提是地图文件启
  • 毕设-解决微信小程序使用HTTP协议从onenet平台获取数据和下发命令的问题

    微信小程序从onenet平台获取数据和下发命令 前言 关于onenet平台 onenet开发文档 获取数据和下发命令 获取数据 下发命令 总结 关于我的终端设备 前言 个人在做毕业设计的时候参考哔哩哔哩上的视频教程 在这里感谢B站大佬发的小
  • 十五. Kubernetes 工作负载 之 DaemonSet

    目录 一 DaemonSet 解释 一 DaemonSet 解释 使用Deployment部署时 部署的服务会随机安装到k8s的多个节点上 可能会出现一次部署的多个pod安装到k8s的同一个节点的情况 使用 DaemonSet无需指定副本数
  • 华为od机试 C++ 【计算快递主站点】

    题目 题目背景 一个快递公司 有一些站点之间可以直接传送快递 如果站点A可以传送给站点B 同时站点B又可以传送给站点C 那么其实站点A也可以直接或间接地传送给站点C 现在的问题是 给定一些站点以及他们之间是否可以直接传送快递的信息 为了确保
  • Elasticsearch安装

    1 在官网下载Get Started with Elasticsearch Kibana and the Elastic Stack Elastic 2 上传到CentOs 我这边在 home software 目录下 3 解压 tar z
  • 时序预测

    时序预测 MATLAB实现PSO LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来 目录 时序预测 MATLAB实现PSO LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来 预测效果 基本介绍 模型描述 程序设计 参考资
  • Module build failed (from ./node_modules/less-loader/dist/cjs.js): Error: Cannot find module ‘less‘

    使用vuex时 运行时报错 发现是版本问题 less loader和less不兼容 less loader默认最高版本 可以在package json里面查看 下载低版本的less loader npm install D less loa
  • 小朋友看了都会的二叉树,你确定不来看看吗?

    努力的程序员会在梦中敲代码 所谓人在床上躺 技术自然涨 这一期将带你走入梦一般的编程 内容抽象 请备好枕头 目录 1 二叉树的概念及结构 2 二叉树链式结构的实现 1 二叉树的概念及结构 概念 一棵二叉树是结点的一个有限集合 该集合或者为空
  • electron 拦截所有页面跳转

    const win new BrowserWindow 处理链接跳转 win webContents on will navigate e url gt e preventDefault shell openExternal url 处理
  • 原码反码补码的概念,以及原码反码的表示形式

    本文主要讲解计算机的原码 反码和补码 的概念 以及原码反码的表示形式 以及原码反码补码之前如何相互转换 还有计算机中数字是怎么样存储的 原码 假设机器字长为n 原码 自然二进制码 是一种计算机中对数字的二进制定点表示方法 原码表示法在数值前
  • Movicon/Connext设备连接实例(四)——Movicon.NExT与西门子1200PLC 以太网通讯

    Movicon Next是全新一代的HMI SCADA解决方案 拥有众多超越传统的扩展功能 Movicon平台有着广泛的应用场景 且在众多行业中继承了优秀的解决方案 得到了市场广泛认证 针对不同的行业都能对快速找出解决方案并快速部署 且整个
  • 浅谈nodejs中间层

    前言 nodejs的出现为前端行业带来了无限的可能性 让很多原来只负责客户端开发的同学也慢慢开始接触和使用服务器端技术 虽然nodejs带来了很多的好处 但是它也存在自身的局限性 和那些传统老牌的编程语言相比 如JAVA PHP nodej
  • R语言中使用Keras进行深度学习文本分类

    目录 1 简介 2 安装和加载Keras 3 准备数据 4 构建模型 5 训练模型 6 评估模型
  • 【多层RNN】keras创造多层RNN

    之前写简单的DNN demo就是复制粘贴模型 今天有时间系统得看了看构造的一些事情 问题describe 创建多层RNN网络 一开始用的是tf的tf nn rnn cell GRUCell 但是报错如下 The added layer mu