You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flux.jl中使用2D LSTM层?尝试写法未获支持

正确创建2D LSTM层的方法(Flux.jl)

1. 先明确Flux.jl中LSTM的基础用法

Flux的LSTM默认处理序列数据(1D时序),构造函数参数为输入特征维度和隐藏单元数量,示例:

# 输入特征数为10,隐藏单元数为4的标准LSTM
l = LSTM(10, 4)

你之前的(10,4)=>(10,1)写法不符合Flux的API规范,因此会报错。

2. 处理2D输入的两种常见方案

方案一:用ConvLSTM处理带空间结构的时序数据

如果你的输入是带2D空间维度的时序数据(比如视频帧、网格时序数据),推荐使用ConvLSTM,它专门适配这类场景:

using Flux

# 创建ConvLSTM层:卷积核大小(3,3),输入通道10,输出通道1,填充为(1,1)以保持空间维度不变
conv_lstm = ConvLSTM((3,3), 10 => 1, pad=(1,1))

该层可直接接收(高度, 宽度, 通道数, 时间步)格式的2D时序输入,输出会保留对应的空间维度。

方案二:展平2D维度后用标准LSTM

如果不需要保留2D空间结构,可先将2D输入展平为1D特征向量,再送入标准LSTM:

using Flux

# 2D输入(10,4)展平后特征数为40,创建对应输入特征数的LSTM
l = LSTM(40, 1)

# 使用时先展平输入:示例输入为5个时间步的(10,4)数据
x = rand(10,4,5)
x_flattened = Flux.flatten(x; dims=1:2)  # 转换为(40,5)格式
output = l(x_flattened)

3. 验证输出维度

可通过Flux.outputsize快速验证输出是否符合预期:

# 验证ConvLSTM输出:输入(10,4,10,5)对应输出(10,4,1,5)
Flux.outputsize(conv_lstm, (10,4,10,5))

# 验证展平后LSTM输出:输入(40,5)对应输出(1,5)
Flux.outputsize(l, (40,5))

内容的提问来源于stack exchange,提问作者BAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:34:56