【发布时间】:2022-01-12 17:27:47
【问题描述】:
我是 pytorch 的新手。我想要做的是将图像转换为 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/data/scale_train.txt','r')
path = 'C:/workspace/darknet/data/MSCOCO/val2017/class'
os.chdir(path)
files = os.listdir(path)
print("transforming image data...")
x_train =[]
for image_name in files :
img = Image.open(image_name)
data = np.array(img)
imgToTensorTransformer = transforms.ToTensor()
tensorFromImg = imgToTensorTransformer(data)
x_train.append(tensorFromImg)
x_train = torch.FloatTensor(x_train)
y_train = genfromtxt('C:/workspace/darknet/data/scale_train.txt', delimiter ='\n')#scale
n_features = 5000
#1) model
input_size = n_features
output_size = 1
model = nn.Linear(input_size, output_size)
#2) loss and optimizer
learning_rate = 0.001
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)
#3) training loop
num_epochs = 2
print("training model...")
for epoch in range(num_epochs):
#forward pass and loss
y_predicted = model(x_train)
loss = criterion(y_predicted, y_train)
#backward pass
loss.backward()
#update
optimizer.step()
optimizer.zero_grad()
if (epoch+1)%10 == 0 :
print(f'epoch: {epoch+1} , loss = {loss.item():.4f}')
#plot
y_predicted = model(x_train).detach().numpy()
plt.plot(x_train, y_train, "ro")
plt.plot(x_train, y_predicted,"b")
plt.show()
return model
请帮助我。 或者,如果有其他方法可以用输入图像训练回归器,如果您能给我建议,我会很高兴。
【问题讨论】:
标签: python pytorch regression