model.add_output(name = 'output_1', input = 'dec1') model.add_output(name = 'output_2', input = 'dec2') model.add_output(name = 'output_3', input = 'dec3') model.add_output(name = 'output_4', input = 'dec4') optimizer = RMSprop(clipnorm = CLIP) model.compile(loss = { 'output_1' : 'categorical_crossentropy', 'output_2' : 'categorical_crossentropy', 'output_3' : 'categorical_crossentropy', 'output_4' : 'categorical_crossentropy'}, optimizer= optimizer) pat = 0 train_history = {'loss' : [], 'val_meteor' : []} best_val_meteor = 0 print("saving stuff...") with open( PREFIX + FOOTPRINT + '.arch', 'w') as outfile: json.dump(model.to_json(), outfile) print("training model with {} parameters...".format(model.get_n_params())) NB = len(b_X_tr) for iteration in xrange(EPOCH): print('_' * 50) train_history['loss'] += [0] for j in xrange(NB): [X_tr] = b_X_tr[j] [Y_tr_1, Y_tr_2, Y_tr_3, Y_tr_4, Y_tr_shifted] = b_Y_tr[j] print('iteration {}/{} bucket {}/{}'.format(iteration+1,EPOCH, j+1,NB)) eh = model.fit({'input_en' : X_tr , 'input_de' : Y_tr_shifted , 'output_1' : Y_tr_1, 'output_2' : Y_tr_2, 'output_3' : Y_tr_3, 'output_4' : Y_tr_4}, batch_size = BATCH_SIZE, nb_epoch = 1, verbose = True) for key in ['loss']: train_history[key][-1] += eh.history[key][0]