Я пытаюсь обучить RNN, используя слой GRU на нескольких последовательностях len N. Как настроить ввод слоя GRU и мои данные обучения и проверки?
Я пробовал разные input_shape (например, (None, N, 2), (N, 2), (None, 2) ...), мои данные имеют 2 столбца и последовательность размером N.
def get_batch(train, ind):
X = np.array([train.loc[i * N: (i+1) * N - 1][['col_1', 'col_2']].values for i in ind])
Y = np.array([train.loc[i * N: (i+1) * N - 1][['target']].values for i in ind])
return X,Y
model = Sequential()
model.add(CuDNNGRU(20, input_shape=(2, 1)))
model.add(Dropout(.4))
model.add(Dense(20, activation='relu'))
model.add(Dropout(.5))
model.add(Dense(1))
model.compile(optimizer=adam(lr=0.005), loss="mae")
def cross_val(ind, train):
fold_size = int(len(ind) / 5)
for i in range(5):
val_ind = ind[i * fold_size: (i+1) * fold_size]
train_ind = [x for x in ind if x not in val_ind]
X_train, Y_train = get_batch(train, train_ind)
X_val, Y_val = get_batch(train, val_ind)
model.fit(X_train, Y_train, validation_data=(X_val, Y_val))
cross_val(ind, train)
Я получаю такую ошибку:
ValueError: Error when checking target: expected dense_54 to have 2 dimensions, but got array with shape (8, 4096, 1)