Преобразование 2D в массив 4D - PullRequest
0 голосов
/ 07 апреля 2020

Работа с входными данными в CNN формы (n_sample, 1, 100, 4), где каждый экземпляр имеет форму (1 x 100 x 4).

print('Input  shape before sampling: ' ,Train_X.shape, Train_Y.shape)
Input  shape before sampling:  (56646, 1, 100, 4) (56646,)

Поскольку мой набор данных сильно несбалансирован, я решил использовать технику SMOTE для повторной выборки класс меньшинства. Тем не менее, поскольку SMOTE Estimator ожидал ввода dim <= 2, я сглаживаю входное значение n <code>x * ny как:

#..reshape (flatten) Train_X for SMOTE resampling
n_samples, k, nx, ny = Train_X.shape
Train_X = Train_X.reshape((n_samples,nx*ny))

#..resample
smote = SMOTE('minority')
X_resample, Y_resample = smote.fit_sample(Train_X, Train_Y)
print('Input shape after sampling: ' , X_resample.shape, Y_resample.shape)

Input shape after sampling:  (85296, 400) (85296,)

, что затем переопределяет класс меньшинства.

Но тогда сверточный слой ожидает dim 4 ввода: (n_sample, 1, 100, 4), поэтому необходимо изменить форму преобразованного входа в это измерение, как показано в следующем сообщении об ошибке:

ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (85296, 400)

Как мне затем изменить форму преобразованного входа обратно в 4D как (85296, 1, 100, 4) от (85296, 400)?

...