Keras:重塑以连接 lstm 和 conv

2023-11-26

这个问题作为一个问题而存在github问题, 也。 我想在 Keras 中构建一个神经网络,其中包含 2D 卷积和 LSTM 层。

网络应对 MNIST 进行分类。 MNIST中的训练数据是60000张手写数字0到9的灰度图像。每张图像都是28x28像素。

我将图像分为四个部分(左/右、上/下),并按四个顺序重新排列它们以获得 LSTM 的序列。

|     |      |1 | 2|
|image|  ->  -------   -> 4 sequences: |1|2|3|4|,  |4|3|2|1|, |1|3|2|4|, |4|2|3|1|
|     |      |3 | 4|

其中一个小子图像的尺寸为 14 x 14。四个序列沿宽度堆叠在一起(无论宽度还是高度都应该无关紧要)。

这将创建一个形状为 [60000, 4, 1, 56, 14] 的向量,其中:

  • 60000是样本数
  • 4 是序列中的元素数量(时间步数)
  • 1 是颜色深度(灰度)
  • 56和14是宽度和高度

现在应该将其赋予 Keras 模型。 问题是改变 CNN 和 LSTM 之间的输入维度。 我在网上搜索了一下,发现了这个问题:Python keras如何将卷积层后的输入大小更改为lstm层

解决方案似乎是一个 Reshape 层,它可以展平图像但保留时间步长(而不是 Flatten 层,它会折叠除批量大小之外的所有内容)。

到目前为止,这是我的代码:

nb_filters=32
kernel_size=(3,3)
pool_size=(2,2)
nb_classes=10
batch_size=64

model=Sequential()

model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
    border_mode="valid", input_shape=[1,56,14]))
model.add(Activation("relu"))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=pool_size))


model.add(Reshape((56*14,)))
model.add(Dropout(0.25))
model.add(LSTM(5))
model.add(Dense(50))
model.add(Dense(nb_classes))
model.add(Activation("softmax"))

此代码创建一条错误消息:

ValueError:新数组的总大小必须保持不变

显然,Reshape 层的输入不正确。作为替代方案,我也尝试将时间步传递到 Reshape 图层:

model.add(Reshape((4,56*14)))

这感觉不对,无论如何,错误仍然存​​在。

我这样做的方式正确吗? Reshape 层是连接 CNN 和 LSTM 的正确工具吗?

对于这个问题有相当复杂的方法。 比如这样:https://github.com/fchollet/keras/pull/1456TimeDistributed Layer 似乎对后续层隐藏了时间步长维度。

或这个:https://github.com/anayebi/keras-extra一组用于组合 CNN 和 LSTM 的特殊层。

如果简单的重塑就能解决问题,为什么还有如此复杂的解决方案(至少对我来说看起来很复杂)?

UPDATE:

尴尬的是,我忘记了池化和(由于缺乏填充)卷积也会改变尺寸。kgrm建议我使用model.summary()检查尺寸。

Reshape层之前层的输出为(None, 32, 26, 5), 我将重塑更改为:model.add(Reshape((32*26*5,))).

现在 ValueError 消失了,取而代之的是 LSTM 抱怨:

异常:输入 0 与层 lstm_5 不兼容:预期 ndim=3,发现 ndim=2

看来我需要通过整个网络传递时间步维度。我怎样才能做到这一点 ?如果我将它添加到卷积的 input_shape 中,它也会抱怨:Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode="valid", input_shape=[4, 1, 56,14])

异常:输入 0 与层 volution2d_44 不兼容:预期 ndim=4,发现 ndim=5


根据二维卷积定义您的输入必须是具有维度的 4 维(samples, channels, rows, cols)。这是您收到错误的直接原因。

要解决这个问题,您必须使用时间分布包装纸。这允许您随时使用静态(非循环)层。

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

Keras:重塑以连接 lstm 和 conv 的相关文章

  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • PyTorch 中的后向函数

    我对 pytorch 的后向功能有一些疑问 我认为我没有得到正确的输出 import numpy as np import torch from torch autograd import Variable a Variable torch
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐

  • 选择计数/重复项

    我有一张包含所有美国邮政编码的表格 每行包含邮政编码的城市和州名称 我正在尝试获取出现在多个州的城市列表 如果同一城市没有 X 个邮政编码 这不会是问题 所以基本上 我只想将一个州的城市算作 1 而不是将城市 州计数 7 次 因为该城市 州
  • 使用 pymongo 在 mongodb 中按 ObjectId 搜索

    我需要使用 pymongo 使用 python 搜索 ObjectId 但总是收到此错误 有什么想法如何搜索吗 import pymongo from pymongo import MongoClient from pymongo impo
  • 如何评估来自 stdin 的 PowerShell 脚本输入

    我想在 PowerShell 中评估 StdIn 的内容 如下所示 echo echo 12 powershell noprofile noninteractive command input iex Output echo 12 很遗憾
  • 如何在 C# 应用程序启动时立即运行代码?

    我已经将一些代码放在了公共内部MainWindow 但我一这样做就不断收到一些晦涩的 XAML 解析错误 不是在我的计算机上 而是在我尝试过的其他 3 台计算机上 是否有一种在应用程序启动时立即运行代码的首选方法 理论上是我希望它打电话回家
  • 如果函数指针不需要 & 符号,为什么 boost::bind 需要一个?

    我一直相信函数指针不需要 符号 然而 我见过的每一个使用的例子boost bind显示一个 并且我的编译器 在大多数情况下 如果省略它 则会给出通常难以理解的错误消息 synchronize boost bind Device asyncU
  • 是否可以通过 Chrome 扩展中的上下文菜单项调用内容脚本方法?

    我正在尝试使用上下文菜单项来调用在内容脚本中编写的方法 那可能吗 正如我所尝试的那样 上下文菜单只能在后端执行操作 E g A generic onclick callback function function genericOnClic
  • 如何在 Linux UVC 驱动程序中启用 UVC_QUIRK_FIX_BANDWIDTH 怪癖?

    我目前正在尝试运行 2webcams在 Wandboard 板上 它们必须共享 USB 集线器 问题是 当前的驱动程序实现 仅限 YUV 使 USB 集线器饱和 最终我只能连接一台相机 然而 UVC 驱动程序的实现有一个怪癖kind情况等
  • dplyr sample_n 其中 n 是分组变量的值

    我有以下分组数据框 我想使用该功能dplyr sample n从此数据框中为每个组提取行 我想使用分组变量的值NDG每组中的行数作为从每组中提取的行数 gt dg tmp lt structure list Gene c CAMK1 GHR
  • 下载功能因文件过大而失败

    你好 我的下载功能 protected void downloadFunction string fileName string filePath D SoftwareFiles LogMessageToFile Download star
  • 具有 ASPN、应用内购买等的多个应用程序中的应用程序 ID 和捆绑种子 ID

    我将创造多个销售版本具有推送通知功能的同一应用程序 酷应用 完整版 CoolApp Free 免费 功能有限 版本 酷应用程序中的应用程序 免费版 可通过应用内升级至完整版 购买 在 Apple Program Portal 中注册 App
  • 在正则表达式中将空格转换为制表符

    在正则表达式中如何表达以下内容 foreach line look at the beginning of the string and convert every group of 3 spaces to a tab Stop once
  • 我应该如何在 JavaScript 中“屈服”?

    我对现代 JavaScript ES8 有点陌生 异步产生的首选方法是什么 即在事件循环的未来迭代中继续执行脚本 使用await 我看到了以下选项 async function yield1 await Promise resolve co
  • 将 std::unique_ptr 与分配器一起使用

    这次我尝试使用分配器 感觉有很多机会泄漏资源 所以我想如果我用怎么办std unique ptr来处理它们 我试着用我的手std vector的分配器 我的代码是这样的 allocator include
  • PHP 不带引号的数组访问

    我在现有的 php 源代码中发现了一个现象 不带撇号的字段访问 如下所示 GET test 我不确定 也不知道这是一种可能的方式 所以我写了一个简短的例子来测试 echo Array Test fields without apostrop
  • 使用 asyncio 的相互递归协程

    我有一个假设 如果我用 asyncio 编写相互递归协程 它们不会遇到最大递归深度异常 因为事件循环正在调用它们 并且像蹦床一样运行 然而 当我这样写时 情况并非如此 import asyncio asyncio coroutine def
  • python 在 root 脚本中以普通用户身份运行命令

    我有一个以 root 身份启动的 python 脚本 我无法更改它 我想知道是否可以以普通用户身份执行此脚本的某些行 或所有脚本 我不需要 root 权限来运行此脚本 原因是 我使用通知 并且 python notify 不适用于 root
  • 如何查找具有相同捆绑包标识符的多个应用程序?

    有谁知道 在文件系统中 查找具有给定包标识符的每个应用程序的好方法 NSWorkspace和启动服务可让您通过捆绑包标识符查找应用程序 但仅返回单个结果 我怀疑聚光灯 NSMetadataQuery 可能会有所帮助 但我对其 API 有点不
  • 如何使用 s3 中的预训练模型来预测某些数据?

    我已经使用 sagemaker 训练了语义分割模型 并且输出已保存到 s3 存储桶中 我想从 s3 加载这个模型来预测 sagemaker 中的一些图像 我知道如何预测训练后是否让笔记本实例继续运行 因为它只是一个简单的部署 但如果我想使用
  • 向 Python enum.IntEnum 添加属性和起始值

    如何定义一个以某种方式派生的 Python 枚举类int 具有自定义起始值 并添加自定义属性 我知道如何从中得出int using enum IntEnum并设置起始值 Goo enum IntEnum Goo MOO FOO LOO st
  • Keras:重塑以连接 lstm 和 conv

    这个问题作为一个问题而存在github问题 也 我想在 Keras 中构建一个神经网络 其中包含 2D 卷积和 LSTM 层 网络应对 MNIST 进行分类 MNIST中的训练数据是60000张手写数字0到9的灰度图像 每张图像都是28x2