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

AE-LSTM中如何拼接LSTM输出张量与特征向量得到[b,t,dl+da]形状?

解决LSTM输出与特征向量的时序拼接问题

这是时序建模里非常常见的特征拼接需求,我来给你详细拆解实现步骤,不管你用PyTorch还是TensorFlow都能搞定~

核心思路

要把形状为[b, da]的特征向量拼接到[b, t, dl]的LSTM输出每个时间步上,关键是把特征向量扩展出时间步维度,让它变成[b, t, da],这样两个张量的维度就完全匹配,最后在特征维度(最后一维)拼接即可。


PyTorch实现(推荐用expand节省内存)

PyTorch里可以用unsqueeze先给特征向量加一个时间步维度,再用expand把这个维度扩展到和LSTM输出一致的长度——expand不会复制数据,比repeat更高效,能节省显存:

import torch

# 模拟输入数据:batch=32,时间步t=10,LSTM特征维度dl=64,额外特征维度da=32
lstm_out = torch.randn(32, 10, 64)  # 形状[b, t, dl]
feat_vec = torch.randn(32, 32)      # 形状[b, da]

# 1. 给特征向量添加时间步维度,变成[b, 1, da]
feat_expanded = feat_vec.unsqueeze(1)
# 2. 扩展时间步维度到t长度,得到[b, t, da]
# 这里的-1表示保持原维度大小,不用手动写死t的值
feat_expanded = feat_expanded.expand(-1, lstm_out.size(1), -1)

# 3. 在最后一维拼接两个张量
final_tensor = torch.cat([lstm_out, feat_expanded], dim=-1)

# 验证形状:应该是[32, 10, 64+32=96]
print(final_tensor.shape)  # 输出: torch.Size([32, 10, 96])

TensorFlow实现

TensorFlow里的思路类似,用expand_dims加维度,再用tile或者repeat扩展时间步:

import tensorflow as tf

# 模拟输入数据
lstm_out = tf.random.normal((32, 10, 64))  # [b, t, dl]
feat_vec = tf.random.normal((32, 32))      # [b, da]

# 1. 添加时间步维度,变成[b, 1, da]
feat_expanded = tf.expand_dims(feat_vec, axis=1)
# 2. 扩展时间步到t长度,得到[b, t, da]
feat_expanded = tf.tile(feat_expanded, [1, tf.shape(lstm_out)[1], 1])

# 3. 拼接张量
final_tensor = tf.concat([lstm_out, feat_expanded], axis=-1)

# 验证形状
print(final_tensor.shape)  # 输出: (32, 10, 96)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:42