def interp_net(): if gpu_num > 1: dev = "/cpu:0" else: dev = "/gpu:0" with tf.device(dev): main_input = Input(shape=(4*num_features, timestamp), name='input') sci = single_channel_interp(ref_points, hours_look_ahead) cci = cross_channel_interp() interp = cci(sci(main_input)) reconst = cci(sci(main_input, reconstruction=True), reconstruction=True) aux_output = Lambda(lambda x: x, name='aux_output')(reconst) z = Permute((2, 1))(interp) z = GRU(hid, activation='tanh', recurrent_dropout=0.2, dropout=0.2)(z) main_output = Dense(1, activation='sigmoid', name='main_output')(z) orig_model = Model([main_input], [main_output, aux_output]) if gpu_num > 1: model = multi_gpu_model(orig_model, gpus=gpu_num) else: model = orig_model print(orig_model.summary()) return model
m = m1 * m2 ypred = ypred[:, :num_features, :] x = (y - ypred) * (y - ypred) x = x * m count = tf.reduce_sum(m, axis=2) count = tf.where(count > 0, count, tf.ones_like(count)) x = tf.reduce_sum(x, axis=2) / count x = x / (wc**2) # divide by std in case of multivariate time-series x = tf.reduce_sum(x, axis=1) / num_features return tf.reduce_mean(x) # Interpolation-Prediction Model main_input = Input(shape=(4 * num_features, timestamp), name='input') sci = single_channel_interp(ref_points, hours_look_ahead, weights=[np.array([-3.0])]) interp = sci(main_input) reconst = sci(main_input, reconstruction=True) aux_output = Lambda(lambda x: x, name='aux_output')(reconst) z = Permute((2, 1))(interp) z = GRU(hid, activation='tanh')(z) main_output = Dense(8, activation='softmax', name='main_output')(z) model = Model([main_input], [main_output, aux_output]) model.compile(optimizer='adam', loss={ 'main_output': 'categorical_crossentropy', 'aux_output': customloss }, loss_weights={ 'main_output': 1.,