def test_train_meta_learner(backprop_depth: int, batch_size: int,
                            lr_bias: float) -> Model:
    """
    :return: Keras Model for Meta-Learner used during training of Meta-Learner using BPTT
    """

    # same inputs as in other models to use same API
    grads_input = Input(batch_shape=(batch_size, backprop_depth, 1),
                        name='grads_input_train')
    loss_input = Input(batch_shape=(batch_size, backprop_depth, 1),
                       name='loss_input_train')
    params_input = Input(batch_shape=(batch_size, 1),
                         name='params_input_train')

    full_input = Concatenate(
        axis=-1, name='concat_grads_loss')([grads_input, loss_input])
    lstm = LSTM(2, name='lstm')
    lstm.trainable = False
    dummy_lstm = lstm(full_input)

    lr = Dense(1,
               name='dense',
               kernel_initializer=Constant(value=0.0),
               bias_initializer=Constant(value=lr_bias),
               activation='sigmoid')(dummy_lstm)

    final_grad = Lambda(lambda x: x[:, -1, :],
                        name='final_grad_input')(grads_input)

    right = Multiply(name='output_right')([lr, final_grad])

    output = Subtract(name='output')([params_input, right])

    return Model(inputs=[grads_input, loss_input, params_input],
                 outputs=output)
def test_predict_meta_learner(learner: Model, backprop_depth: int,
                              batch_size: int) -> MetaPredictLearnerModel:
    """
    :return: MetaPredictLearnerModel for Meta-Learner used during training of Meta-Learner using BPTT
    """
    grads_tensor = K.concatenate([
        K.flatten(g) for g in K.gradients(learner.total_loss,
                                          learner._collected_trainable_weights)
    ],
                                 axis=0)
    # reshape loss/grads so they have shape required for LSTM: (batch_size, 1, 1)
    grads_tensor = K.reshape(grads_tensor, shape=(batch_size, 1, 1))
    loss_tensor = tf.fill(value=learner.total_loss, dims=[batch_size, 1, 1])

    grads_input = Input(tensor=grads_tensor,
                        batch_shape=(batch_size, 1, 1),
                        name='grads_input_predict')
    loss_input = Input(tensor=loss_tensor,
                       batch_shape=(batch_size, 1, 1),
                       name='loss_input_predict')

    params_tensor = K.concatenate(
        [K.flatten(p) for p in learner._collected_trainable_weights])
    params_input = Input(tensor=params_tensor,
                         batch_shape=(batch_size, ),
                         name='params_input_predict')

    full_lstm_input = Concatenate(
        axis=-1, name='concat_grads_loss')([grads_input, loss_input])
    lstm = LSTM(2, stateful=True, return_state=True, name='lstm')
    lstm.trainable = False
    lstm_full_output = lstm(full_lstm_input)
    lstm_output = lstm_full_output[0]
    states_outputs = lstm_full_output[1:]

    lr = Dense(1,
               name='learning_rate_dense',
               kernel_initializer=Constant(value=0.0),
               bias_initializer=Constant(value=0.0),
               activation='sigmoid')(lstm_output)

    flat_grads = Flatten(name='flatten_grads_input')(grads_input)

    right = Multiply(name='output_right')([lr, flat_grads])

    output = Subtract(name='output')([params_input, right])

    return MetaPredictLearnerModel(
        learner=learner,
        train_mode=True,
        backpropagation_depth=backprop_depth,
        inputs=[grads_input, loss_input, params_input],
        input_tensors=[grads_tensor, loss_tensor, params_tensor],
        states_outputs=states_outputs,
        outputs=output)
Пример #3
0
texts_lstm = LSTM(lstm_size, return_sequences=True, input_shape=(maxlen, len(word_indices)),
                  dropout=dropout_rate, recurrent_dropout=dropout_rate, name='LSTM_input')(texts_input)
layer_0 = Dropout(dropout_rate)(concatenate(
    [topic_embed, video_embed, texts_lstm], axis=2, name='merged_input'))

layer_1 = LSTM(lstm_size, return_sequences=False, input_shape=(lstm_size,),
               dropout=dropout_rate, recurrent_dropout=dropout_rate, name='meta-LSTM')(layer_0)
layer_2 = Dense(len(word_indices), name='word_selector')(layer_1)
output = Activation('softmax', name='output')(layer_2)

topic_input.trainable = True
topic_embed.trainable = True
video_input.trainable = True
video_embed.trainable = True
texts_input.trainable = True
texts_lstm.trainable = True
layer_1.trainable = True
model_video = Model(inputs=[topic_input, video_input, texts_input], outputs=[output])
model_video.compile(loss='categorical_crossentropy', optimizer=optimiser)

params = np.repeat(np.atleast_2d(video_param), maxlen, axis=0)

Writing = True
while Writing or Loop:
    model_video.load_weights(brain_file)

    # glitch_layer = model_video.layers[10].get_weights()
    # glitch_sublayer = copy(glitch_layer[1])
    
    # max_val = np.abs(glitch_sublayer)[:].max()
    # mut_ratio = 0.2*float(np.random.randint(1000))/10