РНН с ГРУ в Керасе - PullRequest
       66

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

0 голосов
/ 26 октября 2018

Я хочу реализовать Рекуррентную Нейронную сеть с 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 ]

0 голосов
/ 26 октября 2018

Если вы внимательно прочитаете ошибку, вы поймете, что существует несоответствие форм между указанными вами формами меток, которое составляет (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
0 голосов
/ 26 октября 2018

Здесь вы упомянули входную векторную форму равной 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 и получите тот же размер для входного слоя.

...