예제 #1
0
def create_generation_evaluator_model(base_embedding_layer, gen_units,
                                      embedding_dim, seq_len, vocab_size):
    input_y = Input(shape=(seq_len, ))

    embedding_layer = Embedding(input_dim=vocab_size, output_dim=embedding_dim)
    x = embedding_layer(input_y)  # (batch, seq_len, embedding_dim)

    x = Bidirectional(
        GRU(
            gen_units,  # dropout=0.5, recurrent_dropout=0.5,
            return_sequences=True,
            recurrent_initializer='glorot_uniform'))(x)
    x = Bidirectional(
        GRU(
            gen_units,  #  dropout=0.25, recurrent_dropout=0.0,
            recurrent_initializer='glorot_uniform'))(x)
    x = Dense(gen_units)(x)
    x = BatchNormalization()(x)
    x = Activation("relu")(x)
    x = Dense(1)(x)

    model = Model(inputs=input_y, outputs=x)

    embedding_weights = [var.numpy() for var in base_embedding_layer.weights]
    embedding_layer.set_weights(embedding_weights)
    embedding_layer.trainable = False

    return model
예제 #2
0
def define_generator(latent_dim, n_classes=3):
    print("**********  ENTERED generator  *****************")
    ##### foundation for labels
    in_label = Input(shape=(1, ))
    embedding_layer = Embedding(n_classes, 8)
    embedding_layer.trainable = True
    li = embedding_layer(in_label)
    n_nodes = 5 * 5
    li = Dense(n_nodes)(li)
    li = Reshape((5, 5, 1))(li)
    print("generator...  n_nodes, li.shape: ", n_nodes, li.shape)
    ##### foundation for 5x5 image
    in_lat = Input(shape=(latent_dim, ))
    n_nodes = 128 * 5 * 5
    genX = Dense(n_nodes)(in_lat)
    genX = LeakyReLU(alpha=0.2)(genX)
    genX = Reshape((5, 5, 128))(genX)
    dropout = 0.1
    print("genX.shape: ", genX.shape)
    ##### merge image gen and label input
    merge = Concatenate()([genX, li])
    print("merge.shape: ", merge.shape)
    ##### create merged model
    # upsample to 10x10
    gen = Conv2DTranspose(128, (4, 4), strides=(2, 2), padding='same')(merge)
    print("gen after CV2DT.shape: ", gen.shape)
    gen = LeakyReLU(alpha=0.2)(gen)
    gen = Dropout(dropout)(gen)
    print("gen.shape: ", gen.shape)
    # upsample to 20x20
    gen = Conv2DTranspose(128, (4, 4), strides=(2, 2), padding='same')(gen)
    gen = LeakyReLU(alpha=0.2)(gen)
    print("gen.shape: ", gen.shape)
    # upsample to 40x40
    gen = Conv2DTranspose(128, (4, 4), strides=(2, 2), padding='same')(gen)
    gen = LeakyReLU(alpha=0.2)(gen)
    print("gen.shape: ", gen.shape)
    # upsample to 80x80
    gen = Conv2DTranspose(128, (4, 4), strides=(2, 2), padding='same')(gen)
    gen = LeakyReLU(alpha=0.2)(gen)
    print("gen.shape: ", gen.shape)
    # output layer 80x80x3
    out_layer = Conv2D(3, (5, 5), activation='tanh', padding='same')(gen)
    print("out_layer.shape: ", out_layer.shape)
    # define model
    model = Model(inputs=[in_lat, in_label], outputs=out_layer)
    opt = Adamax(lr=0.0002, beta_1=0.5, beta_2=0.999, epsilon=10e-8)
    model.compile(loss=['binary_crossentropy'], optimizer=opt)
    print("\nembedding_layer.get_weights(): \n", embedding_layer.get_weights())
    model.summary()
    plot_model(model, to_file='cgan/generator_model.png')
    return model
예제 #3
0
def tranferModel(nmt_base_model,
                 en_len,
                 fr_len,
                 MAX_VOCAB,
                 ENC_EMB_DIM,
                 DEC_EMB_DIM,
                 HID_DIM,
                 EMB_TRAIN=True,
                 GRU_LAYER=True,
                 is_trainable=False):
    fr_vocab = en_vocab = MAX_VOCAB
    en_inputs = Input(shape=(en_len, ), name='en_inputs')
    tr_en_emb_layer = Embedding(en_vocab + 1,
                                ENC_EMB_DIM,
                                input_length=en_len,
                                trainable=EMB_TRAIN,
                                name='en_emb')
    tr_en_emb = tr_en_emb_layer(en_inputs)
    tr_en_emb_masked = Masking(name='en_emb_mask')(tr_en_emb)  ###
    if GRU_LAYER:
        tr_en_gru = GRU(HID_DIM, return_state=True, dropout=0.5, name='en_gru')
        en_out, en_state = tr_en_gru(tr_en_emb_masked)
    else:
        tr_en_gru = LSTM(HID_DIM,
                         return_state=True,
                         dropout=0.5,
                         name='en_lstm')
        en_out, en_state, en_carry = tr_en_gru(tr_en_emb_masked)
    if not is_trainable:
        tr_en_emb_layer.trainable = False
        tr_en_gru.trainable = False

    de_inputs = Input(shape=(fr_len - 1, ), name='de_inputs')
    tr_de_emb_layer = Embedding(fr_vocab + 1,
                                DEC_EMB_DIM,
                                input_length=fr_len - 1,
                                trainable=EMB_TRAIN,
                                name='de_emb')
    tr_de_emb = tr_de_emb_layer(de_inputs)
    tr_de_emb_masked = Masking(name='de_emb_mask')(tr_de_emb)  ###
    if GRU_LAYER:
        tr_de_gru = GRU(HID_DIM,
                        return_sequences=True,
                        return_state=True,
                        dropout=0.5,
                        name='de_gru')
        de_out, _ = tr_de_gru(tr_de_emb_masked, initial_state=en_state)
    else:
        tr_de_gru = LSTM(HID_DIM,
                         return_sequences=True,
                         return_state=True,
                         dropout=0.5,
                         name='de_lstm')
        de_out, _, _ = tr_de_gru(tr_de_emb_masked,
                                 initial_state=[en_state, en_carry])
    tr_de_dense_0 = TimeDistributed(Dense(HID_DIM,
                                          activation='relu',
                                          name='de_dense_0'),
                                    name='de_timedense_0')  # fr_vocab
    tr_de_dense_0_output = tr_de_dense_0(de_out)  ###
    tr_de_dense_1 = Dense(fr_vocab, activation='softmax',
                          name='de_dense_1')  # trainable
    de_pred = TimeDistributed(tr_de_dense_1,
                              name='de_timedense_1')(tr_de_dense_0_output)
    if not is_trainable:
        tr_de_emb_layer.trainable = False
        tr_de_gru.trainable = False
        tr_de_dense_0.trainable = False
    # Define the new transfer learning model which accepts encoder/decoder inputs and outputs predictions
    nmt_emb = Model(inputs=[en_inputs, de_inputs],
                    outputs=de_pred,
                    name='transfer_learning_model')
    return nmt_emb, en_inputs, tr_en_emb_layer, tr_en_gru, en_state, \
                    de_inputs, tr_de_emb_layer, tr_de_gru, tr_de_dense_0, tr_de_dense_1