对于多个输入,我需要一个形状为 (N,1) 而不是 (N,) 的 numpy 向量,__data_generator XY 问题我需要我的 X
I need a numpy vector with the shape (N,1) and not (N,) for multiple inputs, __data_generator XY problem i need my X
我需要 X[0].shape 为 (N, 120, 160, 3) 这有效但我也需要 X[1].shape = (N, 1, 1) 但我只得到 ( N,)
我试过重塑它,但没成功。
我正在研究 data_generator。我正在尝试将来自汽车摄像头的输入加载到 XY 中,以便能够在其上训练模型(目标是制造一辆自动驾驶汽车)。
我正在为此苦苦挣扎。
下面是看得我头疼的部分
image_data = {
"image": np.zeros((120, 160, 3), np.float32),
"speed": 3.4,
"throttle": 0.4,
"steering": 0.14,
}
inputs=["image", "speed"]
outputs=["steering", "throttle"]
batch_size = 64
X = []
Y = []
for j in range(len(inputs)):
L = []
for i in range(batch_size):
data = np.array(list(image_data.items()))
L.append(data[j][1])
X.append(np.array(L))
根据您当前的问题,如果您想要 (64,1)
形状,您可以使用 np.reshape
手动重塑它
X[1]=np.reshape(X[1],(64,1))
X[1].shape
Out[59]: (64, 1)
同样,将列表转换为 numpy 数组并再次列出是低效的。首先执行列表中的所有操作,然后才将 X[0] 和 X[1] 转换为 numpy 数组。
for j in range(len(inputs)):
L = []
for i in range(batch_size):
data = list(image_data.items())
L.append(data[j][1])
X.append(L)
这是我找到的修复方法,我没有在寻找正确的解决方案。
def __data_generation(self):
X = [[] for _ in range(len(self.inputs))]
Y = [[] for _ in range(len(self.outputs))]
rdm_paths = np.random.choice(self.paths, size=self.batch_size)
for path in rdm_paths:
try:
image_data = io.load_image_data(path)
self.augm(image_data)
for i, inp in enumerate(self.inputs):
data = np.array(image_data[inp])
if len(data.shape) < 2:
data = np.expand_dims(data, axis=0)
X[i].append(data)
for i, out in enumerate(self.outputs):
data = np.array(image_data[out])
if len(data.shape) < 2:
data = np.expand_dims(data, axis=0)
Y[i].append(data)
except Exception:
logging.debug(f"Error processing {path}")
X = [np.array(x) for x in X]
Y = [np.array(y) for y in Y]
return X, Y ```
我需要 X[0].shape 为 (N, 120, 160, 3) 这有效但我也需要 X[1].shape = (N, 1, 1) 但我只得到 ( N,)
我试过重塑它,但没成功。
我正在研究 data_generator。我正在尝试将来自汽车摄像头的输入加载到 XY 中,以便能够在其上训练模型(目标是制造一辆自动驾驶汽车)。 我正在为此苦苦挣扎。
下面是看得我头疼的部分
image_data = {
"image": np.zeros((120, 160, 3), np.float32),
"speed": 3.4,
"throttle": 0.4,
"steering": 0.14,
}
inputs=["image", "speed"]
outputs=["steering", "throttle"]
batch_size = 64
X = []
Y = []
for j in range(len(inputs)):
L = []
for i in range(batch_size):
data = np.array(list(image_data.items()))
L.append(data[j][1])
X.append(np.array(L))
根据您当前的问题,如果您想要 (64,1)
形状,您可以使用 np.reshape
X[1]=np.reshape(X[1],(64,1))
X[1].shape
Out[59]: (64, 1)
同样,将列表转换为 numpy 数组并再次列出是低效的。首先执行列表中的所有操作,然后才将 X[0] 和 X[1] 转换为 numpy 数组。
for j in range(len(inputs)):
L = []
for i in range(batch_size):
data = list(image_data.items())
L.append(data[j][1])
X.append(L)
这是我找到的修复方法,我没有在寻找正确的解决方案。
def __data_generation(self):
X = [[] for _ in range(len(self.inputs))]
Y = [[] for _ in range(len(self.outputs))]
rdm_paths = np.random.choice(self.paths, size=self.batch_size)
for path in rdm_paths:
try:
image_data = io.load_image_data(path)
self.augm(image_data)
for i, inp in enumerate(self.inputs):
data = np.array(image_data[inp])
if len(data.shape) < 2:
data = np.expand_dims(data, axis=0)
X[i].append(data)
for i, out in enumerate(self.outputs):
data = np.array(image_data[out])
if len(data.shape) < 2:
data = np.expand_dims(data, axis=0)
Y[i].append(data)
except Exception:
logging.debug(f"Error processing {path}")
X = [np.array(x) for x in X]
Y = [np.array(y) for y in Y]
return X, Y ```