现在我有两个数据,一个数据是(batch_size, embedding_dim),一个数据是(squence_length),这两个数据都是tensor数据。如何使用张量拼接,构造为一个形状为(batch_size, sequence_length, embedding_dim)的数据
时间: 2024-03-26 13:36:10 浏览: 74
TensorFlow中如何确定张量的形状实例
可以使用`torch.unsqueeze`函数和`torch.cat`函数来将这两个张量拼接为一个形状为(batch_size, sequence_length, embedding_dim)的张量。
假设第一个数据为`embedding_tensor`,形状为(batch_size, embedding_dim),第二个数据为`sequence_tensor`,形状为(sequence_length),可以使用以下代码进行拼接:
```python
import torch
# 构造样例数据
batch_size = 2
sequence_length = 3
embedding_dim = 4
embedding_tensor = torch.randn(batch_size, embedding_dim)
sequence_tensor = torch.tensor([1, 2, 3])
# 将embedding_tensor在第1维度上扩展
embedding_tensor = embedding_tensor.unsqueeze(1).expand(batch_size, sequence_length, embedding_dim)
# 将embedding_tensor和sequence_tensor在第1维度上拼接
result_tensor = torch.cat([embedding_tensor, sequence_tensor.unsqueeze(-1)], dim=2)
print(result_tensor.shape)
```
其中,`torch.unsqueeze(1)`函数用于在第1维度上扩展`embedding_tensor`,结果形状为(batch_size, 1, embedding_dim),然后使用`expand`函数将张量在第1维度上复制`sequence_length`次,形状变为(batch_size, sequence_length, embedding_dim)。
接着,使用`torch.cat`函数将`embedding_tensor`和`sequence_tensor`在第3维度上拼接,得到形状为(batch_size, sequence_length, embedding_dim + 1)的结果张量。
输出结果为:
```
torch.Size([2, 3, 5])
```
其中,最后一维的大小为`embedding_dim + 1`,是因为`sequence_tensor`扩展为了形状为(sequence_length, 1),在拼接时需要在第3维度上增加1维。
阅读全文