OpenAI的REINFORCE和演员批评强化学习的例子有以下代码:
加强:
policy_loss = torch.cat(policy_loss).sum()
Run Code Online (Sandbox Code Playgroud)
loss = torch.stack(policy_losses).sum() + torch.stack(value_losses).sum()
Run Code Online (Sandbox Code Playgroud)
一个是使用torch.cat,另一个是使用torch.stack.
就我的理解而言,该文件并未对它们作出任何明确的区分.
我很高兴知道这些功能之间的差异.
我有张量列表,每个张量都有不同的大小,如何使用 pytroch 将此张量列表转换为张量
有关更多信息,我的列表包含张量,每个张量都有不同的大小,例如第一个张量大小是 torch.Size([76080, 38])
其他张量的形状在第二个元素中会有所不同,例如列表中的第二个张量是 torch.Size([76080, 36])
当我使用 torch.tensor(x) 我得到一个错误 ValueError: only one element tensors can be convert to Python scalars
我有一个张量列表:
object_ids = [tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.]), tensor([2., 3.])]
Run Code Online (Sandbox Code Playgroud)
直观上,我似乎应该能够由此创建一个新的张量:
torch.as_tensor(object_ids, dtype=torch.float32)
Run Code Online (Sandbox Code Playgroud)
但这不起作用。显然, torch.as_tensor 和 torch.Tensor 只能将标量列表转换为新的张量。它无法将 d-dim 张量列表转换为 d+1 dim 张量。
我有一个单词嵌入的句子列表。所以每个句子都是一个16*300的矩阵,所以它是一个二维张量。我想将它们连接到 3d 张量并使用这个 3d 张量作为 CNN 模型的输入。不幸的是,我无法将其放入这个 3d 张量中。
在我看来,至少通过 tf.concat 将这些 2d 张量中的两个连接到较小的 3d 张量应该可以工作。不幸的是,我收到以下错误消息
tf.concat(0, [Tweets_final.Text_M[0], Tweets_final.Text_M[1]])
ValueError: Shape (3, 16, 300) must have rank 0
Run Code Online (Sandbox Code Playgroud)
如果它适用于两个二维张量,我可能会使用一个循环
列表中的这些 2d 张量之一如下所示:
<tf.Tensor: shape=(16, 300), dtype=float32, numpy= array([[-0.03571776, 0.07699937, -0.02208528, ..., 0.00873246,
-0.05967658, -0.03735098],
[-0.03044251, 0.050944 , -0.02236165, ..., -0.01745957,
0.01311598, 0.01744673],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
...,
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. …Run Code Online (Sandbox Code Playgroud)