【发布时间】:2019-02-09 14:15:29
【问题描述】:
我有一个 4 维张量的图像像素数据(红色(高度,宽度),绿色(高度,宽度),蓝色(高度,宽度),14000 个示例)和一个包含边界框坐标的 CSV 文件每个图像都有 ie, (Image name, X1, Y1, X2, Y2),它有 14000 行,每个示例也有一个。
如何将这些数据输入我的神经网络?目前,如果我尝试输入张量,它会将 14000 个示例的整个数组传递给 (X1,Y1,X2,Y2) 的一行{它应该为 x1,y1,x2,y2 的一行传递一个数组}。
知道如何解决这个问题吗?
这是代码和相关的错误:
train_csv = pd.read_csv('datasets/training.csv').values
test_csv = pd.read_csv('datasets/test.csv').values
y_train = train_csv[:,[1,2,3,4]] #done
x_train_names = train_csv[:,0] #obtained names of images in array
#### load images into an array ####
X_train = []
path = "datasets/images/images/"
imagelist = listdir(path)
for i in range(len(x_train_names)):
img_name = x_train_names[i]
img = Image.open(path + str(img_name))
arr = array(img)
X_train.append(arr)
#### building a very basic classifier, just to get some result ####
classifier = Sequential()
classifier.add(Convolution2D(64,(3,3),input_shape=(64,64,3), activation =
'relu'))
classifier.add(Dropout(0.2))
classifier.add(MaxPooling2D((4,4)))
classifier.add(Convolution2D(32,(2,2), activation = 'relu'))
classifier.add(MaxPooling2D((2,2)))
classifier.add(Flatten())
classifier.add(Dense(16, activation = 'relu'))
classifier.add(Dropout(0.5))
classifier.add(Dense(4))
classifier.compile('adam','binary_crossentropy',['accuracy'])
classifier.fit(x=X_train,y=y_train, steps_per_epoch=80, batch_size=32,
epochs=25)
错误:
ValueError:检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 1 个数组,但得到了以下 14000 个数组的列表:
[array([[[141, 154, 144],
[141, 154, 144],
[141, 154, 144],
...,
[149, 159, 150],
[150, 160, 151],
[150, 160, 151]],
[[140, 153, 143],
[…
编辑:我将所有图像都转换为灰度图像,因此不会出现内存错误。这意味着我的 X_train 应该沿通道数(早期,RGB)具有 1 个维度。这是我编辑的代码:
y_train = train_csv[:,[1,2,3,4]] #done
x_train_names = train_csv[:,0] #obtained names of images in array
# load images into an array
path = "datasets/images/images/"
imagelist = listdir(path)
img_name = x_train_names[0]
X_train = np.ndarray((14000,img.height,img.width,1))
for i in range(len(x_train_names)):
img_name = x_train_names[i]
img = Image.open(path + str(img_name)).convert('L')
##converting image to grayscale because I get memory error else
X_train[i,:,:,:] = np.asarray(img)
ValueError: 无法将输入数组从形状 (480,640) 广播到形状 (480,640,1)
(在X_train[i,:,:,:] = np.asarray(img) 线)
【问题讨论】:
标签: python arrays machine-learning keras deep-learning