如何设置 1dCNN+LSTM 网络(Keras)的输入形状?

2024-05-04

我有以下想法要实施:

                       Input -> CNN-> LSTM -> Dense -> Output

输入有 100 个时间步长,每个步长有一个 64 维特征向量

A Conv1D层将在每个时间步提取特征。 CNN 层包含 64 个滤波器,每个滤波器的长度为 16 个抽头。然后,maxpooling 层将提取每个卷积输出的单个最大值,因此每个时间步总共将提取 64 个特征。

那么CNN层的输出将是馈入 LSTM 层有 64 个神经元。递归次数与输入的时间步长相同,即 100 个时间步长。 LSTM层应该返回一个64维输出的序列(序列的长度==时间步数==100,所以应该有100*64=6400个数字)。

input = Input(shape=(100,64), dtype='float', name='mfcc_input')
CNN_out = TimeDistributed(Conv1D(64, 16, activation='relu'))(mfcc_input)
CNN_out = BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True)(CNN_out)
CNN_out = TimeDistributed(MaxPooling1D(pool_size=(64-16+1), strides=None, padding='valid'))(CNN_out)

LSTM_out = LSTM(64,return_sequences=True)(CNN_out)

... (more code) ...

但这行不通。第二行报告“列表索引超出范围“我不明白发生了什么事。

我是 Keras 的新手,所以如果有人能帮助我,我真诚地感激。

这张图解释了CNN应该如何应用于每个时间步 https://i.stack.imgur.com/ublHo.jpg


问题出在你的输入上。你的输入是有形状的(100, 64)其中第一个维度是时间步长。所以忽略这一点,你的输入是有形状的(64) to a Conv1D.

现在,请参考Keras Conv1D 文档 https://keras.io/layers/convolutional/#conv1d,它表明输入应该是 3D 张量(batch_size, steps, input_dim)。忽略batch_size,你的输入应该是一个二维张量(steps, input_dim).

因此,您提供一维张量输入,其中输入的预期大小是二维张量。例如,如果您向Conv1D以单词的形式,那么你的句子中有 64 个单词,假设每个单词都用长度为 50 的向量进行编码,那么你的输入应该是(64, 50).

另外,请确保您向 LSTM 提供正确的输入,如下面的代码所示。

所以,正确的代码应该是

embedding_size = 50  # Set this accordingingly
mfcc_input = Input(shape=(100, 64, embedding_size), dtype='float', name='mfcc_input')
CNN_out = TimeDistributed(Conv1D(64, 16, activation='relu'))(mfcc_input)
CNN_out = BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True)(CNN_out)
CNN_out = TimeDistributed(MaxPooling1D(pool_size=(64-16+1), strides=None, padding='valid'))(CNN_out)

# Directly feeding CNN_out to LSTM will also raise Error, since the 3rd dimension is 1, you need to purge it as
CNN_out = Reshape((int(CNN_out.shape[1]), int(CNN_out.shape[3])))(CNN_out)

LSTM_out = LSTM(64,return_sequences=True)(CNN_out)

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

如何设置 1dCNN+LSTM 网络(Keras)的输入形状? 的相关文章

随机推荐

  • 在 WPF 字体大小和“标准”字体大小之间转换

    我注意到在 WPF 中 12 磅的默认字体大小大致相当于 普通 应用程序 例如写字板 中的 9 磅 WPF 中的 10 磅大约是 7 磅标准 当我尝试匹配默认字体大小时在WPF写字板中的10 pt中 我发现13是最接近的 首先 为什么WPF
  • 如何在 PrimeNG 的 FileUpload 组件中中止文件上传?

    一 总结 基于PrimeNG中选择的文件文件上传组件 https www primefaces org primeng fileupload 我想中止特定文件名模式的文件上传到后端服务器 角度 6 0 7 PrimeNG 6 0 2 2 第
  • 将四边形(四边形)拟合到斑点

    应用不同的过滤和分割技术后 我最终得到如下图像 我可以访问一些轮廓检测函数 这些函数返回该对象边缘上的点列表 或者返回一个拟合的多边形 尽管有很多边 远多于 4 个 我想要一种将四边形适合该形状的方法 因为我知道它是应该是四边形的鞋盒的正面
  • PNG:deflate 和 zlib

    我试图理解 PNG 的压缩 但我似乎 网上查了很多自相矛盾的资料 我想了解 LZ77部分 带链表的哈希表中的搜索是如何完成的 这是在 deflate 中定义的吗 或者在zlib中实现 可以选择搜索方法吗 PNG 编码器 解码器可以设置一些压
  • Firebase 模拟器返回空数据,但部署后工作正常

    我编写了一个非常基本的 API 它将返回服务 我尝试在模拟器中运行此 API 但它返回空数据 status success statusCode 200 message Services retrieved data 我已经设置了 fire
  • Snakemake - 无法从输出文件中确定输入文件中的通配符

    我对snakemake很陌生 而且对python也不太熟悉 所以抱歉 这可能是一个非常基本的愚蠢问题 我目前正在构建一个管道来分析一组 bamfilesatlas https bitbucket org phaentu atlas wiki
  • 使用 VSCode 时无法单步执行“仅我的代码”?

    调试时 VSCode 中是否有像 Visual Studio 中的 Just my Code 选项一样的选项 我想单步执行我自己的代码 而不是像 next tick js 这样的所有内部节点代码 我尝试过添加 skipFiles node
  • 当我尝试导入添加到 WEB-INF/lib 的 jars 时,它们无法被识别:说该包不存在

    我已经添加了org apache commons fileupload and org apache commons io封装成WEB INF lib我的项目基于 google appengine 的目录 但是当我尝试导入 servlet
  • Matplotlib 行高表属性

    我已经尝试了我能找到的所有命令和文档 如何在这里设置行的高度 from pylab import Create a figure fig1 figure 1 ax1 1 fig1 add subplot 111 Add a table wi
  • Solr MoreLikeThis 不适用于多个分片?

    我在 SolrCloud 中有 5 个节点集群 每个节点有 2 个分片 Solr版本 6 3 0 现在 当我运行 mlt 查询时 它仅返回每个节点的结果 并且不会将它们分布在所有分片 节点上 即 没有给出任何结果 给出结果 我什至尝试将其指
  • 硒隐式等待不起作用

    这是我第一次使用 selenium 和无头浏览器 因为我想使用 ajax 技术抓取一些网页 效果很好 但在某些情况下加载整个页面需要太多时间 特别是当某些资源不可用时 所以我必须为selenium设置一个超时 首先我尝试过set page
  • Spring Integration 中的 @Router 与注释(请求/回复)

    您能提供在 Spring Integration 中路由消息的任何示例吗 按有效负载消息 标头或类似以下内容进行过滤
  • 将 -1 作为文件描述符传递给 mmap

    我对 FC17 Linux 中的 ls 命令进行了 strace 以下是输出 execve usr bin ls ls 48 vars 0 brk 0 0x27c1000 mmap NULL 4096 PROT READ PROT WRIT
  • 3D 数学:根据“向上”和“向上”正交向量计算倾斜(滚动)角度

    我希望这是提出这个问题的正确位置和这个一样 https stackoverflow com questions 3035590 bank angle from up vector and look at vector 但表示为纯数学而不是图
  • 隐式强制转换对委托类型推断的意外影响

    我有一个简单的Money带有隐式转换的类型decimal struct Money decimal innerValue public static implicit operator Money decimal value return
  • 在 Applescript 中监控 Spotify 曲目变化?

    我正在尝试找出通过 Spotify 的 Applescript 库检测曲目更改的最佳方法 到目前为止 我已经尝试检查玩家位置 如果它等于 0 则它是一个新曲目 并且咆哮通知会再次出现 如果有人重新开始一首歌等 这通常不起作用 我想知道是否更
  • 为什么复制构造函数会有多个参数?

    12 8 2 非模板构造函数 对于类 X 是一个复制构造函数 如果 它的第一个参数是 X 类型 const X 易失性 X 或 const 易失性 X 并且要么没有 其他参数或其他所有 参数有默认参数 8 3 6 106 到目前为止 我还没
  • 似乎找不到循环 PL/SQL 数组的方法?

    我正在尝试这样做 arrCauses APEX UTIL STRING TO TABLE P1 CAUSE FOR c IN 1 arrCauses count LOOP INSERT INTO DT EVENT CAUSE EVENT I
  • 量角器未连接到 DevTools

    当我的页面从 Protractor 运行时 如何使用 Chrome 开发者工具来检查它 当我尝试打开开发工具时 我从量角器收到此错误 UnknownError disconnected not connected to DevTools S
  • 如何设置 1dCNN+LSTM 网络(Keras)的输入形状?

    我有以下想法要实施 Input gt CNN gt LSTM gt Dense gt Output 输入有 100 个时间步长 每个步长有一个 64 维特征向量 A Conv1D层将在每个时间步提取特征 CNN 层包含 64 个滤波器 每个