我在keras中有以下代码:
# load all images in a directory into memory
def load_images(path, size=(256,512)):
src_list, tar_list = list(), list()
# enumerate filenames in directory, assume all are images
for filename in listdir(path):
# load and resize the image
pixels = load_img(pa
我想把在for循环中生成的张量连接起来,得到2 2dTensor。
标准蟒蛇,如下所示。
li = []
for i in range(0, len(items)):
# calc something
li.append(calc_result)
在我的例子中,在for循环中,生成torch.Size([768])张量,我想得到torch.Size([len(item),768])张量。
怎么做?
我在用CIFAR10数据集训练我的CNN。我提取了50,000张维度(32 X 32 X 3)的图像,并在列表中读取它们。我将它们转换为numpy数组,并将其存储在列表中。我对我的训练和测试的标签也做了同样的处理。
然后,我在pytorch中构建了两层和一个FC的CNN。在此之前,我创建了自己的自定义数据加载器。在这样做的同时,我输入的图像的尺寸正在发生变化。尺寸(32 X 32 X 3)正在更改为(3 X 32 X 32),并且我无法训练我的神经网络。
tensor_x = torch.stack([torch.Tensor(i) for i in train_images])
tensor
我有以下张量:
X = torch.randn(30,1,2) # [batch_size, dim_1, dim_2]
t = torch.Tensor([0])
我正在尝试将t张量连接到X张量,结果是30,1,3张量。但是,即使使用torch.stack,我也尝试了几种方法。我仍然没有想出如何正确地做到这一点。我两个都试过了,他们给出了错误。
result = torch.cat((X,t), dim = -1) # first try
result = torch.stack([X,t], dim = -1) # second try.
有没有办法把这些张量连接起来?
在“火把”中,给定形状的张量( a of (1X11) )和形状的张量( b of (1X11) ),torch.stack((a,b),0)会给出形状(2X11)的张量。
然而,当a为形状(2X11)而b为形状(1X11)时,torch.stack((a,b),0)将引起错误cf。“两个张量大小必须完全相同”。
因为这两个张量是模型的输出(梯度包括),所以我不能将它们转换为numpy来使用np.stack()或np.vstack()。
是否有任何可能的解决方案,至少GPU内存使用?
有人能分解密码并解释给我听吗?需要帮助的部分用"#This部件“表示。我非常感谢您的帮助。
def validation_epoch_end(self, outputs):
batch_losses = [x["val_loss"]for x in outputs] #This part
epoch_loss = torch.stack(batch_losses).mean()
batch_accs = [x["val_acc"]for x in outputs] #This part
epoch_acc = to
我对火把很陌生。我想要做的是将图像转换为numpy数组,作为回归模型的输入。所以我把图像转换成numpy数组,然后转换成张量。它是变量x_train。但是我得到了一个错误如下:
x_train = torch.FloatTensor(x_train)
ValueError: only one element tensors can be converted to Python scalars
下面是训练回归者的代码。
def train_scalereg(network):
#0) prepare data
f = open('C:/workspace/darknet/d
假设我有两个张量S和T,定义如下:
S = torch.rand((3,2,1))
T = torch.ones((3,2,1))
我们可以将其视为包含具有形状(2, 1)的张量的批次。在本例中,批处理大小为3。
我想在批次之间连接所有可能的配对。批处理的单个串联会产生形状为(4, 1)的张量。有一些张量组合,所以最终得到的张量C必须是(3, 3, 4, 1)的形状。
一种解决方案是执行以下操作:
for i in range(S.shape[0]):
for j in range(T.shape[0]):
C[i,j,:,:] = torch.cat((S[i,:,:],T[j,
如何解决ValueError:只有一个元素张量可以转换为Python标量
我正在密切关注关于构建的教程。然而,在培训中,我的代码无法保存检查点,给了我前面提到的ValueError。错误发生在torch.save(torch.tensor(train_loss_set), os.path.join(output_dir, 'training_loss.pt'))
下面是我对应于列车迭代器的代码:
num_train_epochs = 1
print("***** Running training *****")
print(" Num example
使用索引和使用torch.stack来构造一个张量有什么好处吗?
索引
out = torch.empty(length, n)
for ii in range(length)
out[ii] = f(ii)
torch.stack
out = [f(ii) for ii in range(length)]
out = torch.stack(out)
基准测试
通过对两者进行基准测试,torch.stack似乎始终比索引速度快一倍以上:
[------------ 8 -------------]
| nojit | jit
1 threads: -
我使用从numpy数组创建数据集。
# convert numpy arrays to pytorch tensors
X_train = torch.stack([torch.from_numpy(np.array(i)) for i in X_train])
y_train = torch.stack([torch.from_numpy(np.array(i)) for i in y_train])
# reshape into [C, H, W]
X_train = X_train.reshape((-1, 1, 28, 28)).float()
# create dataset a
我的层是这样的(我正在创建一个LSTM层,在每个时间步应用dropout,输入传递10次,并返回输出的平均值)
import torch
from torch import nn
class StochasticLSTM(nn.Module):
def __init__(self, input_size: int, hidden_size: int, dropout_rate: float):
"""
Args:
- dropout_rate: should be between 0 and 1
我的数据集是由从原始图像(人脸补丁和随机外部的脸补丁)获得的图像补丁组成的。修补程序存储在一个文件夹中,该文件夹的名称为修补程序来源的原始图像。我创建了自己的DataSet和DataLoader,但是当我在数据集上迭代时,数据不会成批返回。一批大小为1的批应该包含一个由补丁和标签组成的元组数组,因此随着批大小的增加,我们应该得到一个带有标签的元组数组。但是DataLoader只返回一个元组数组,而不管批大小如何。
我的数据集:
import os
import cv2 as cv
import PIL.Image as Image
import torchvision.tran
我试图计算出一系列火炬张量的平均值和std值。我的数据集有720张训练图像,每幅图像都有4个地标,X和Y代表图像上的一个2D点。
to_tensor = transforms.ToTensor()
landmarks_arr = []
for i in range(len(train_dataset)):
landmarks_arr.append(to_tensor(train_dataset[i]['landmarks']))
mean = torch.mean(torch.stack(landmarks_arr, di
我已经开发了两个collate函数来从h5py文件中读取数据(我试图在这里为MWE创建一些合成数据,但没有计划)。 在处理我的数据方面,两者之间的差异大约是10倍--这是一个非常大的增长,我不确定其中的原因,我很好奇对我未来的collate函数的见解。 def slow(batch):
'''
This function retrieves the data emitted from the H5 torch data set.
It alters the emitted dimensions from the dataloader
f
我有一个火炬张量,形状的edge_index,(2, N),它表示图中的边。对于每个(x, y),也有一个(y, x),其中x和y是节点ID (ints)。在我的模型向前通过时,我需要遮住某些边缘。例如,我有:
n1 = [0, 3, 4] # list of node ids as x
n2 = [1, 2, 1] # list of node ids as y
edge_index = [[1, 2, 0, 1, 3, 4, 2, 3, 1, 4, 2, 4], # actual edges as (x, y) and (y, x)
[2, 1, 1,
我已经开发了一些代码在我的数据集上应用自动编码器,以便从中提取隐藏的特征。我有一个由84个变量组成的数据集,它们已经被规范化了。
epochs = 10
batch_size = 128
lr = 0.008
# Convert Input and Output data to Tensors and create a TensorDataset
input = torch.Tensor(input.to_numpy())
output = torch.tensor(output.to_numpy())
data = torch.utils.data.TensorDataset(i
有一个PyTorch张量列表,我想将其转换为数组,但它是错误引发的:
'list‘对象没有属性'cpu’
如何将其转换为数组?
import torch
result = []
for i in range(3):
x = torch.randn((3, 4, 5))
result.append(x)
a = result.cpu().detach().numpy()