对于多个输入,我需要一个形状为 (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 ```