我已经把我的数据放到了 torch 张量上,现在我想分成大小为64的批次.我得到了以下代码:

batch = 0
BATCH_SIZE = 64
X_train = x_scaled.to(device)
y_train = y_scaled.to(device)

for batch in range(0,len(X_train[0]),BATCH_SIZE):
   ### Training
   model.train() # train mode is on by default after construction
   # 1. Forward pass
   y_pred = model(X_train[0:2][batch:batch+BATCH_SIZE])

张量的形状是:torch.Size([2, 11938]).我想把它切成[2,64].但是,它没有正确切片并给出错误:mat1 and mat2 shapes cannot be multiplied (2x11938 and 2x64)

我想要的是:

tensor([[0.0000, 0.0002, 0.0004, 0.0005, 0.0007, 0.0009, 0.0011, 0.0013, 0.0014,
    0.0016, 0.0018, 0.0018, 0.0020, 0.0022, 0.0023, 0.0025, 0.0027, 0.0029,
    0.0029, 0.0031, 0.0032, 0.0034, 0.0036, 0.0038, 0.0040, 0.0041, 0.0043,
    0.0045, 0.0047, 0.0049, 0.0051, 0.0052, 0.0054, 0.0056, 0.0058, 0.0060,
    0.0061, 0.0061, 0.0063, 0.0065, 0.0067, 0.0069, 0.0070, 0.0072, 0.0074,
    0.0076, 0.0078, 0.0079, 0.0081, 0.0083, 0.0083, 0.0085, 0.0087, 0.0088,
    0.0090, 0.0092, 0.0094, 0.0094, 0.0096, 0.0097, 0.0099, 0.0101, 0.0103,
    0.0105],[0.0684, 0.0684, 0.0684, 0.0684, 0.0684, 0.0684, 0.0684, 0.0684, 0.0684,
    0.0703, 0.0703, 0.0703, 0.0684, 0.0684, 0.0703, 0.0703, 0.0703, 0.0703,
    0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703,
    0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703,
    0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703,
    0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703, 0.0703,
    0.0703, 0.0703, 0.0712, 0.0712, 0.0712, 0.0712, 0.0712, 0.0712, 0.0712,
    0.0712]], device='cuda:0', dtype=torch.float64)

我得到的:

tensor([[0.0000e+00, 1.8038e-04, 3.6076e-04,  ..., 9.9964e-01, 9.9982e-01,
         1.0000e+00],
        [6.8395e-02, 6.8395e-02, 6.8395e-02,  ..., 5.7695e-01, 5.7695e-01,
         5.7695e-01]], device='cuda:0', dtype=torch.float64)

我怎样才能把 torch 张量切成所需的形状?

推荐答案

您应该阅读在pytorch/numpy和其他类似的库中索引是如何工作的.

你有一个形状为(2, 11938)的张量.

当你用X_train[0:2]建立索引时,你得到的张量大小是(2, 11938).如果您想要所有行,则不需要索引.

当你用X_train[0:2][batch:batch+BATCH_SIZE]来索引时,你就是在用[batch:batch+BATCH_SIZE]来索引X_train[0:2]的结果.这意味着您仍在索引第一个轴.

如果你想要一块大小为BATCH_SIZE的块从第二个轴,你需要索引第二个轴,即X_train[:, batch:batch+BATCH_SIZE].

Python相关问答推荐

在Python中对分层父/子列表进行排序

线性模型PanelOLS和statmodels OLS之间的区别

根据另一列中的nan重置值后重新加权Pandas列

如何记录脚本输出

从groupby执行计算后创建新的子框架

关于Python异步编程的问题和使用await/await def关键字

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

Django RawSQL注释字段

Python中的变量每次增加超过1

Discord.py -

GPT python SDK引入了大量开销/错误超时

如何在GEKKO中使用复共轭物

利用SCIPY沿第一轴对数组进行内插

修改.pdb文件中的值并另存为新的

类型对象';敌人';没有属性';损害';

如何在python tkinter中绑定键盘上的另一个回车?

如何获取给定列中包含特定值的行号?

查找数据帧的给定列中是否存在特定值

使用Scikit的ValueError-了解

利用广播使减法更有效率