РНН с ГРУ в Керасе

Я хочу реализовать Рекуррентную Нейронную сеть с GRU, используя Keras в python. У меня проблема с запуском кода, и я все больше меняю переменные, но это не работает. У вас есть идея, чтобы решить это?

inputs = 42          #number of columns input  
num_hidden =50      #number of neurons in the layer
outputs = 1           #number of columns output  
num_epochs = 50
batch_size = 1000
learning_rate = 0.05
#train       (125973, 42)  125973 Rows and 42 Features
#Labels  (125973,1) is True Results
model = tf.contrib.keras.models.Sequential()
fv=tf.contrib.keras.layers.GRU
model.add(fv(units=42, activation='tanh', input_shape= (1000,42),return_sequences=True))  #i want to send Batches to train


#model.add(tf.keras.layers.Dropout(0.15))  # Dropout overfitting

#model.add(fv((1,42),activation='tanh', return_sequences=True))
#model.add(Dropout(0.2))  # Dropout overfitting

model.add(fv(42, activation='tanh'))
model.add(tf.keras.layers.Dropout(0.15))  # Dropout overfitting

model.add(tf.keras.layers.Dense(1000,activation='softsign'))
#model.add(tf.keras.layers.Activation("softsign"))


start = time.time()
# sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
# model.compile(loss="mse", optimizer=sgd)
model.compile(loss="mse", optimizer="Adam") 
inp = np.array(train)
oup = np.array(labels)
X_tr = inp[:batch_size].reshape(-1, batch_size, inputs)
model.fit(X_tr,labels,epochs=20, batch_size=batch_size)

Однако я получаю следующую ошибку:

ValueError: Error when checking target: expected dense to have shape (1000,) but got array with shape (1,)

2 ответа

Здесь вы упомянули, что входная векторная форма равна 1000.

model.add(fv(units=42, activation='tanh', input_shape= (1000,42),return_sequences=True)) #i want to send Batches to train

Тем не менее, форма ваших тренировочных данных (X_tr) равна 1-D. Проверьте переменную X_tr и получите тот же размер для входного слоя.

Если вы внимательно прочитаете ошибку, вы поймете, что существует несоответствие формы между формами меток, которые вы предоставляете, что (None, 1)и форма вывода модели, которая (None, 1):

ValueError: Error when checking target:  <--- This means the output shapes
expected dense to have shape (1000,)     <--- output shape of model  
but got array with shape (1,)            <--- the shape of labels you give when training

Поэтому вы должны сделать их последовательными. Вам просто нужно изменить количество единиц в последнем слое на 1, так как для каждой входной выборки есть один выход:

model.add(tf.keras.layers.Dense(1, activation='softsign')) # 1 unit in the output
Другие вопросы по тегам