Python 轴不';pytorch中的t匹配数组
我是pytorch的新手,我已经被困在这里一个多星期了。 我正在尝试使用AlexNet制造一辆“gta san Andreas”自动驾驶汽车,我在准备数据方面遇到了很多问题。 现在我得到了这个错误Python 轴不';pytorch中的t匹配数组,python,pytorch,torchvision,Python,Pytorch,Torchvision,我是pytorch的新手,我已经被困在这里一个多星期了。 我正在尝试使用AlexNet制造一辆“gta san Andreas”自动驾驶汽车,我在准备数据方面遇到了很多问题。 现在我得到了这个错误 Traceback (most recent call last): File "training_script.py", line 19, in <module> transformed_data = transform(all_data) File "C:\Users\
Traceback (most recent call last):
File "training_script.py", line 19, in <module>
transformed_data = transform(all_data)
File "C:\Users\Mukhtar\Anaconda3\lib\site-packages\torchvision\transforms\transforms.py", line 49, in __call__
img = t(img)
File "C:\Users\Mukhtar\Anaconda3\lib\site-packages\torchvision\transforms\transforms.py", line 76, in __call__
return F.to_tensor(pic)
File "C:\Users\Mukhtar\Anaconda3\lib\site-packages\torchvision\transforms\functional.py", line 48, in to_tensor
img = torch.from_numpy(pic.transpose((2, 0, 1)))
ValueError: axes don't match array
这就是我准备数据的方式
import cv2
from PIL import ImageGrab
import numpy as np
import time
from directKeys import PressKey,W,A,S,D
from getKeys import key_check
import os
def keys_to_output(keys):
output = [0,0,0]
if 'A' in keys:
output[0] = 1
elif 'D' in keys:
output[2] = 1
else:
output[1] = 1
return output
file_name = "training_data.npy"
if os.path.isfile(file_name):
print("file exists , loading previous data!")
training_data = list(np.load(file_name))
else:
print("file does not exist , starting fresh")
training_data = []
last_time = time.time()
while True:
kernel = np.ones((15 , 15) , np.float32)/225
get_screen = ImageGrab.grab(bbox=(10,10,1280,720))
screen_shot = np.array(get_screen)
hsv = cv2.cvtColor(screen_shot , cv2.COLOR_BGR2HSV)
lower_color = np.array([90 , 0 , 70])
upper_color = np.array([100 , 100 , 100])
output = cv2.inRange(hsv , lower_color , upper_color)
kernel = np.ones((1,20), np.uint8) # note this is a horizontal kernel
dilation = cv2.dilate(output, kernel, iterations=1)
output = cv2.erode(dilation, kernel, iterations=1)
# output = cv2.Canny(output , threshold1 = 50 , threshold2 = 300)
# output = cv2.GaussianBlur(output , (15,15) , 0)
resized = cv2.resize(output , (640 , 480))
print('loop took {} seconds'.format(time.time()-last_time))
last_time = time.time()
cv2.imshow('manipulated' , resized)
screen_output = cv2.resize(output , (32 ,32))
keys = key_check()
Keys_output = keys_to_output(keys)
training_data.append([screen_output,Keys_output])
if cv2.waitKey(1) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
if len(training_data) % 500 == 0:
print(len(training_data))
np.save(file_name,training_data)
我尝试了很多解决方案,但都不管用,但我觉得我错过了一些东西。
我有点不知所措,所以请帮我把转换应用到numpy数组列表,而不是单个PIL图像(这通常是
ToTensor()
transforms所期望的)。@shai-Yup这就是问题所在,谢谢。
我将我的培训代码编辑为:
all_data = np.load('training_data.npy')
inputs= all_data[:,0]
labels= all_data[:,1]
inputs_tensors = torch.stack([torch.Tensor(i) for i in inputs])
labels_tensors = torch.stack([torch.Tensor(i) for i in labels])
data_set = torch.utils.data.TensorDataset(inputs_tensors,labels_tensors)
data_loader = torch.utils.data.DataLoader(data_set, batch_size=3,shuffle=True, num_workers=2)
all_data = np.load('training_data.npy')
inputs= all_data[:,0]
labels= all_data[:,1]
inputs_tensors = torch.stack([torch.Tensor(i) for i in inputs])
labels_tensors = torch.stack([torch.Tensor(i) for i in labels])
data_set = torch.utils.data.TensorDataset(inputs_tensors,labels_tensors)
data_loader = torch.utils.data.DataLoader(data_set, batch_size=3,shuffle=True, num_workers=2)