コード例 #1
0
 def do_attention(self, x):
     '''
     add none or one of the following attention layers
     :param x:
     :param att_type:
     :return:
     '''
     att_layer = None
     if self.att_type == 'scaled_dot':
         att_layer = scaled_dot_attention.ScaledDotProductAttention(
             name='Attention')
         x = att_layer(x)
         # x = GlobalAveragePooling1D()(x)
         x = GlobalMaxPooling1D()(x)
     elif self.att_type == 'seq_self_attention':
         att_layer = seq_self_attention.SeqSelfAttention(
             attention_activation='sigmoid')
         x = att_layer(x)
         # x = GlobalAveragePooling1D()(x)
         x = GlobalMaxPooling1D()(x)
     elif self.att_type == 'seq_weighted_attention':
         att_layer = seq_weighted_attention.SeqWeightedAttention()
         x = att_layer(x)
         # x = seq_weighted_attention.SeqWeightedAttention()(x)
     elif self.att_type == 'attention_with_context':
         att_layer = many_to_one_attention_with_context.AttentionWithContext(
         )
         x = att_layer(x)
     return x, att_layer
コード例 #2
0
def build_model2():
    d = 0.2

    model_input = Input(shape=(time_steps, input_dim))
    x = Bidirectional(LSTM(128, return_sequences=True))(model_input)
    x = Dropout(d)(x)
    #x = Bidirectional(LSTM(64, return_sequences=False))(x)
    #x = Dropout(d)(x)
    a = Attention()([x, x])
    out1 = GlobalMaxPooling1D()(x)
    out2 = GlobalMaxPooling1D()(a)
    merge = Concatenate()([out1, out2])
    x = Dense(16, activation='relu')(merge)
    x = Dense(1, activation='sigmoid')(x)

    model = Model(model_input, x)

    lossfn = tf.keras.losses.BinaryCrossentropy(
        from_logits=False,
        label_smoothing=0.0,
        axis=-1,
        reduction="auto",
        name="binary_crossentropy",
    )
    # 二分类
    model.compile(optimizer='rmsprop', loss=lossfn, metrics=['accuracy'])
    return model
コード例 #3
0
def create_cnn(num_classes: int = 2) -> tf.keras.Model:
    x = Input(shape=(256, ), dtype="int64")
    h = Embedding(en2vec.corpus_size + 1, 128, input_length=256)(x)

    conv1 = Convolution1D(filters=256, kernel_size=10, activation="tanh")(h)
    conv2 = Convolution1D(filters=256, kernel_size=7, activation="tanh")(h)
    conv3 = Convolution1D(filters=256, kernel_size=5, activation="tanh")(h)
    conv4 = Convolution1D(filters=256, kernel_size=3, activation="tanh")(h)

    h = Concatenate()([
        GlobalMaxPooling1D()(conv1),
        GlobalMaxPooling1D()(conv2),
        GlobalMaxPooling1D()(conv3),
        GlobalMaxPooling1D()(conv4),
    ])

    h = Dense(1024, activation="selu", kernel_initializer="lecun_normal")(h)
    h = AlphaDropout(0.1)(h)
    h = Dense(1024, activation="selu", kernel_initializer="lecun_normal")(h)
    h = AlphaDropout(0.1)(h)

    y = Dense(num_classes, activation="softmax")(h)

    model = Model(x, y)
    model.compile(optimizer="adam",
                  loss="categorical_crossentropy",
                  metrics=["accuracy", AUC()])
    return model
コード例 #4
0
    def build_model(lr=0.0,
                    lr_d=0.0,
                    units=0,
                    spatial_dr=0.0,
                    kernel_size1=3,
                    kernel_size2=2,
                    dense_units=128,
                    dr=0.1,
                    conv_size=32):
        file_path = "best_model.hdf5"
        check_point = ModelCheckpoint(file_path,
                                      monitor="val_loss",
                                      verbose=1,
                                      save_best_only=True,
                                      mode="min")
        early_stop = EarlyStopping(monitor="val_loss", mode="min", patience=3)

        inp = Input(shape=(max_len, ))
        x = Embedding(39457,
                      embed_size,
                      weights=[embedding_matrix],
                      trainable=False)(inp)
        x1 = SpatialDropout1D(spatial_dr)(x)

        x_gru = Bidirectional(LSTM(units, return_sequences=True))(x1)
        x1 = Conv1D(conv_size,
                    kernel_size=kernel_size1,
                    padding='valid',
                    kernel_initializer='he_uniform')(x_gru)
        avg_pool1_gru = GlobalAveragePooling1D()(x1)
        max_pool1_gru = GlobalMaxPooling1D()(x1)

        x_lstm = Bidirectional(LSTM(units, return_sequences=True))(x1)
        x1 = Conv1D(conv_size,
                    kernel_size=kernel_size1,
                    padding='valid',
                    kernel_initializer='he_uniform')(x_lstm)
        avg_pool1_lstm = GlobalAveragePooling1D()(x1)
        max_pool1_lstm = GlobalMaxPooling1D()(x1)

        x = concatenate(
            [avg_pool1_gru, max_pool1_gru, avg_pool1_lstm, max_pool1_lstm])
        x = BatchNormalization()(x)
        x = Dropout(dr)(Dense(dense_units, activation='relu')(x))
        x = Dense(2, activation="sigmoid")(x)

        model = Model(inputs=inp, outputs=x)
        model.compile(loss="binary_crossentropy",
                      optimizer=Adam(lr=lr, decay=lr_d),
                      metrics=["accuracy"])

        history = model.fit(X_train,
                            y_ohe,
                            batch_size=128,
                            epochs=5,
                            validation_split=0.1,
                            verbose=1,
                            callbacks=[check_point, early_stop])
        model = load_model(file_path)
        return model
コード例 #5
0
def BiLSTM2_CNN3_model(args, embedding_matrix):
    VOCAB_SIZE = args.vocab_size
    EMBEDDING_DIM = args.emb_dim
    MAX_LENGTH = args.max_len
    NUM_EPOCHS = args.num_epochs
    LSTM_OUT = args.lstm_out
    DROPOUT = args.dropout
    FILTERS = args.num_filters
    KERNEL_SIZE = args.kernel_size
    STRIDES = args.strides

    inp = Input((MAX_LENGTH, ))
    emb = Embedding(VOCAB_SIZE,
                    EMBEDDING_DIM,
                    weights=[embedding_matrix],
                    input_length=MAX_LENGTH)(inp)
    emb = Dropout(DROPOUT)(emb)

    conv1 = Conv1D(FILTERS,
                   KERNEL_SIZE,
                   padding="valid",
                   activation="relu",
                   strides=STRIDES)(emb)
    pool1 = GlobalMaxPooling1D()(conv1)

    conv2 = Conv1D(FILTERS,
                   KERNEL_SIZE + 1,
                   padding="valid",
                   activation="relu",
                   strides=STRIDES)(emb)
    pool2 = GlobalMaxPooling1D()(conv2)

    conv3 = Conv1D(FILTERS,
                   KERNEL_SIZE + 2,
                   padding="valid",
                   activation="relu",
                   strides=STRIDES)(emb)
    pool3 = GlobalMaxPooling1D()(conv3)

    lstm = Bidirectional(
        LSTM(LSTM_OUT,
             return_sequences=True,
             dropout=0.2,
             recurrent_dropout=0.2))(emb)
    drop = Dropout(DROPOUT)(lstm)
    lstm2 = Bidirectional(LSTM(LSTM_OUT, dropout=0.2,
                               recurrent_dropout=0.2))(drop)

    combined = concatenate([pool1, pool2, pool3, lstm2])
    dense1 = Dense(512, activation="relu")(combined)
    drop1 = Dropout(DROPOUT)(dense1)
    dense2 = Dense(128, activation="relu")(drop1)
    drop2 = Dropout(DROPOUT / 2)(dense2)
    dense3 = Dense(32, activation="relu")(drop2)
    output = Dense(1, activation="sigmoid")(dense3)

    return Model(inp, output)
コード例 #6
0
def build_model(
    hparams
):
    input_layer = Input(shape=(hparams["max_sequence_length"], ))
    embedding_layer_static = get_w2v('').get_keras_embedding(train_embeddings=False)(input_layer)
    embedding_layer = get_w2v('').get_keras_embedding(train_embeddings=True)(input_layer)
    
    submodels = []
    kernel_sizes = hparams['kernel_sizes'].split('-')
    for ks in kernel_sizes:
        model = Sequential()
        conv_1_d = Conv1D(
            activation = 'relu',
            filters = hparams["filters"], 
            kernel_size = int(ks),
            kernel_constraint = max_norm(hparams["max_norm_value"])
        )
        conv_layer_static = conv_1_d(embedding_layer_static)
        conv_layer = conv_1_d(embedding_layer)
        max_pooling_static = GlobalMaxPooling1D()(conv_layer_static)
        max_pooling = GlobalMaxPooling1D()(conv_layer)
        concatenate_layer = Concatenate()([max_pooling_static, max_pooling])
        submodels.append(concatenate_layer)
    concat = Concatenate()(submodels)
    dropout_layer_1 = Dropout(hparams['dropout_ratio'])(concat)
    hidden_layer = Dense(
        hparams['hidden_size'], 
        activation = 'relu', 
        kernel_initializer = initializers.RandomUniform(
            minval = - 1 / np.sqrt(len(kernel_sizes) * 2* hparams['filters']),
            maxval = 1 / np.sqrt(len(kernel_sizes) * 2 * hparams['filters'])
        ),
        bias_initializer = initializers.Zeros(),
        kernel_regularizer = regularizers.l2(hparams['l2_regularization'])
    )(dropout_layer_1)
    dropout_layer_2 = Dropout(hparams['dropout_ratio'])(hidden_layer)
    output_layer = Dense(
        2,
        activation = 'sigmoid',
        kernel_initializer = initializers.RandomUniform(
            minval = - 1 / np.sqrt(hparams['hidden_size']),
            maxval = 1 / np.sqrt(hparams['hidden_size'])
        ),
        bias_initializer = initializers.Zeros(),
        kernel_regularizer = regularizers.l2(hparams['l2_regularization'])
    )(dropout_layer_2)
    
    model = Model(inputs=[input_layer], outputs=[output_layer])
    model.compile(
        loss = dice_loss,
        optimizer = Adam(learning_rate = hparams["learning_rate"]),
        metrics = [f1_score]
    )
    from keras.utils.vis_utils import plot_model
    plot_model(model, "model_cnn_multichannel.png", show_layer_names=False)
    return model
コード例 #7
0
def multichannel_cnn():
    """
    Build the Multichannel CNN model
    """
    feature_length = 600
    input_layer = Input(shape=(feature_length, ))

    # Load the embedding weights and set the embedding layer
    weights = np.load(open('weights/100d.npy', 'rb'))
    embedding_layer = Embedding(input_dim=weights.shape[0],
                                output_dim=weights.shape[1],
                                mask_zero=False,
                                weights=[weights],
                                trainable=False)

    embedding = embedding_layer(input_layer)
    embedding = Dropout(0.6)(embedding)

    # channel 1
    channel_1 = Conv1D(filters=1024,
                       kernel_size=2,
                       padding='valid',
                       activation='relu')(embedding)
    channel_1 = GlobalMaxPooling1D()(channel_1)

    # channel 2
    channel_2 = Conv1D(filters=1024,
                       kernel_size=4,
                       padding='valid',
                       activation='relu')(embedding)
    channel_2 = GlobalMaxPooling1D()(channel_2)

    # Fully connected network
    fully_connected = Concatenate()([channel_1, channel_2])
    fully_connected = Dropout(0.4)(fully_connected)
    fully_connected = Dense(128,
                            activation='relu',
                            kernel_constraint=unit_norm(),
                            bias_constraint=unit_norm())(fully_connected)
    fully_connected = Dropout(0.4)(fully_connected)
    output = Dense(1,
                   activation='sigmoid',
                   kernel_constraint=unit_norm(),
                   bias_constraint=unit_norm())(fully_connected)

    model = Model(inputs=(input_layer), outputs=output)

    # Model settings
    metrics = [
        WorkSavedOverSamplingAtRecall(recall=1, name='wss'),
        WorkSavedOverSamplingAtRecall(recall=0.95, name='wss_95')
    ]
    opt = optimizers.Adam(1e-4)
    model.compile(optimizer=opt, loss='binary_crossentropy', metrics=metrics)
    return model
コード例 #8
0
    def model(inputlen,
              vocabulary,
              vector_dim,
              embedding_dim=128,
              lstm_unit=100,
              num_class=0,
              drop_rate=0.5,
              l2=0.01,
              train=False,
              init_emb_enable=False,
              init_emb=None,
              attention_enable=False):

        input = Input(shape=(inputlen))
        if train == True:
            label = Input(shape=(num_class))

        if init_emb_enable == False:
            embeddings_init = 'uniform'
        else:
            embeddings_init = keras.initializers.constant(init_emb)

        embedding = Embedding(input_dim=vocabulary,
                              output_dim=embedding_dim,
                              embeddings_initializer=embeddings_init,
                              input_length=inputlen)(input)
        reshape = Reshape((inputlen, embedding_dim))(embedding)

        if attention_enable == True:
            lstm = Bidirectional(LSTM(lstm_unit,
                                      return_sequences=True))(reshape)
            attention_output = Attention()([lstm, lstm])
            pool_output1 = GlobalMaxPooling1D()(lstm)
            pool_output2 = GlobalMaxPooling1D()(attention_output)
            lstm = Concatenate()([pool_output1, pool_output2])
        else:
            lstm = Bidirectional(LSTM(lstm_unit,
                                      return_sequences=False))(reshape)

        if drop_rate != 0:
            dropout = Dropout(drop_rate)(lstm)
        else:
            dropout = lstm
        dense = Dense(vector_dim,
                      activity_regularizer=regularizers.l2(l2))(dropout)

        bn = BatchNormalization()(dense)

        if train == True:
            output = ArcFace(n_classes=num_class)([bn, label])
            model = Model([input, label], output)
        else:
            model = Model(input, bn)

        return model
コード例 #9
0
ファイル: esim_layers.py プロジェクト: ForestLee/nn_qa
    def __call__(self, inputs):
        a = inputs[0]
        b = inputs[1]

        a_avg = GlobalAveragePooling1D()(a)
        a_max = GlobalMaxPooling1D()(a)

        b_avg = GlobalAveragePooling1D()(b)
        b_max = GlobalMaxPooling1D()(b)

        return concatenate([a_avg, a_max, b_avg, b_max])
コード例 #10
0
    def brnn(self):
        inputs = Input(shape=(image_size,image_size), dtype='float32', name='inputs')

        brnn1  = Bidirectional(LSTM(lstm_dim, return_sequences=True))(inputs)
        x1 = GlobalMaxPooling1D()(brnn1)

        inputs_ = Lambda(lambda t: K.permute_dimensions(t, pattern=(0,2,1)))(inputs)
        brnn2  = Bidirectional(LSTM(lstm_dim, return_sequences=True))(inputs_)
        x2 = GlobalMaxPooling1D()(brnn2)

        concat = Concatenate(axis=1)
        x = concat([x1,x2])
        self.model = Model(inputs, x)
コード例 #11
0
def define_model(input_shape_text,
                 input_shape_emoji):  #input_shape = embeddings dimensions
    # TODO: adapt filters, add regularizers

    # channel 1 : textual features
    input1 = Input(shape=input_shape_text)
    conv1 = Conv1D(filters=128, kernel_size=4,
                   activation='relu')(input1)  #(embedding1) #filter size 4
    #drop1 = Dropout(0.5)(conv1) # higher drop out = often slower and more consistent learning
    pool1 = GlobalMaxPooling1D()(conv1)
    drop1 = Dropout(0.2)(pool1)
    flat1 = Flatten()(drop1)
    #dense1 = Dense(256, activation = 'relu')

    # channel 2: emoji features
    input2 = Input(shape=input_shape_emoji)
    conv2 = Conv1D(filters=64, kernel_size=2,
                   activation='relu')(input2)  #(embedding2) #filter size 6
    # drop2 = Dropout(0.5)(conv2)
    pool2 = GlobalMaxPooling1D()(conv2)
    drop2 = Dropout(0.2)(pool2)
    flat2 = Flatten()(drop2)
    #d ense2 = Dense(256, activation = 'relu')

    # # channel 3: image features
    # input3 = Input(shape=input_shape_img)
    # conv3 = Conv2D(filters = 128, kernel_size = 1, activation = 'relu')(input3) #(embedding3) #filter size 8
    # conv4 = Conv2D(filters = 128, kernel_size = 3, activation = 'relu')(conv3)
    # # drop3 = Dropout(0.5)(input4)
    # pool3 = GlobalMaxPooling2D()(conv4)
    # drop3 = Dropout(0.2)(pool3)
    # flat3 = Flatten()(drop3)
    # #dense3 = Dense(256, activation = 'relu')

    # merge + classification layer
    merged = concatenate([flat1, flat2])
    dense1 = Dense(128, activation='relu')(merged)
    dropout = Dropout(0.5)(dense1)
    outputs = Dense(3, activation='softmax')(dropout)

    model = Model(inputs=[input1, input2], outputs=outputs)
    # compile
    model.compile(loss='categorical_crossentropy',
                  optimizer=optimizers.RMSprop(learning_rate=0.001),
                  metrics=['accuracy'])
    # summary
    print(model.summary())

    return model
コード例 #12
0
ファイル: rcnn_variant.py プロジェクト: sucre111/novice
 def __init__(self,
              maxlen,
              max_features,
              embedding_dims,
              kernel_sizes=[1, 2, 3, 4, 5],
              class_num=1,
              last_activation='sigmoid'):
     super(RCNNVariant, self).__init__()
     self.maxlen = maxlen
     self.max_features = max_features
     self.embedding_dims = embedding_dims
     self.kernel_sizes = kernel_sizes
     self.class_num = class_num
     self.last_activation = last_activation
     self.embedding = Embedding(self.max_features,
                                self.embedding_dims,
                                input_length=self.maxlen)
     self.bi_rnn = Bidirectional(LSTM(128, return_sequences=True))
     self.concatenate = Concatenate()
     self.convs = []
     for kernel_size in self.kernel_sizes:
         conv = Conv1D(128, kernel_size, activation='relu')
         self.convs.append(conv)
     self.avg_pooling = GlobalAveragePooling1D()
     self.max_pooling = GlobalMaxPooling1D()
     self.classifier = Dense(self.class_num,
                             activation=self.last_activation)
コード例 #13
0
 def __init__(self,
              padding_size,
              vocab_size,
              embed_size,
              filter_num,
              num_classes,
              kernel_sizes=[3,4,5],
              kernel_regularizer=None,
              last_activation='softmax'):
     super(TextCNN,self).__init__()
     self.padding_size=padding_size
     self.kernel_sizes=kernel_sizes
     self.num_classes=num_classes
     embed_initer = tf.keras.initializers.RandomUniform(minval=-1, maxval=1)
     self.embedding=Embedding(input_dim=vocab_size,
                              output_dim=embed_size,
                              input_length=padding_size,
                              embeddings_initializer=embed_initer,
                              name='embedding')
     self.conv1s=[]
     self.avgpools=[]
     for kernel_size in kernel_sizes:
         self.conv1s.append(Conv1D(filters=filter_num,kernel_size=kernel_size,activation='relu',kernel_regularizer=kernel_regularizer))
         self.avgpools.append(GlobalMaxPooling1D())
     self.classifier=Dense(num_classes,activation=last_activation,)
コード例 #14
0
ファイル: decision.py プロジェクト: antonyjm462/EmotAI
def model():
    input_length = 428
    input_dim = 203169
    num_classes = 7
    embedding_dim = 500
    lstm_units = 128
    lstm_dropout = 0.1
    recurrent_dropout = 0.1
    filters=64
    kernel_size=3
    input_layer = Input(shape=(input_length,))
    output_layer = Embedding(
      input_dim=input_dim,
      output_dim=embedding_dim,
      input_shape=(input_length,)
    )(input_layer)
    output_layer = Bidirectional(
    LSTM(lstm_units, return_sequences=True,
         dropout=lstm_dropout, recurrent_dropout=recurrent_dropout)
    )(output_layer)
    output_layer = Conv1D(filters, kernel_size=kernel_size, padding='valid',
                        kernel_initializer='glorot_uniform')(output_layer)

    avg_pool = GlobalAveragePooling1D()(output_layer)
    max_pool = GlobalMaxPooling1D()(output_layer)
    output_layer = concatenate([avg_pool, max_pool])

    output_layer = Dense(num_classes, activation='softmax')(output_layer)
    model = Model(input_layer, output_layer)
    file = os.path.join(THIS_FOLDER, 'static/model.h5')
    model.load_weights(file)
    return model
コード例 #15
0
 def __init__(self,
              input_dim,
              output_dim,
              filters=250,
              kernel_size=3,
              emb_dim=300,
              embeddings=None,
              trainable=True):
     self.input = Input(shape=(None, ), name='input')
     if embeddings is None:
         self.embedding = Embedding(input_dim=input_dim,
                                    output_dim=emb_dim,
                                    trainable=trainable,
                                    name='embedding')
     else:
         self.embedding = Embedding(input_dim=embeddings.shape[0],
                                    output_dim=embeddings.shape[1],
                                    trainable=trainable,
                                    weights=[embeddings],
                                    name='embedding')
     self.conv = Conv1D(filters,
                        kernel_size,
                        padding='valid',
                        activation='relu',
                        strides=1)
     self.pool = GlobalMaxPooling1D()
     self.fc = Dense(output_dim, activation='softmax')
コード例 #16
0
    def _build_sentence_model(self, input_name):
        # add input layer as first
        input = Input(shape=(self.max_text_len, ),
                      name=str.format(f'{input_name}_input'))

        # we will load embedding values from corpus here.
        embed = Embedding(input_dim=self.embedding_matrix.shape[0],
                          output_dim=self.embedding_matrix.shape[1],
                          input_length=self.max_text_len,
                          weights=[self.embedding_matrix],
                          name=str.format(f'{input_name}_embed'),
                          trainable=False)(input)

        # add convolutional layer
        conv = Conv1D(filters=self.no_conv_filters,
                      kernel_size=5,
                      strides=1,
                      padding='same',
                      activation='relu',
                      kernel_regularizer=regularizers.l2(1e-5),
                      name=str.format(f'{input_name}_conv'))(embed)

        # add some dropout rate for prevent overfitting
        conv = Dropout(self.dropout_rate)(conv)

        x_pool = GlobalMaxPooling1D(
            name=str.format(f'{input_name}_pool'))(conv)

        return input, x_pool
コード例 #17
0
def emotion_recognition_model(input_length,
                              input_dim,
                              num_classes,
                              embedding_layer,
                              embedding_dim=100,
                              dropout=0.1,
                              gru_units=128,
                              gru_dropout=0.1,
                              recurrent_dropout=0.1):
    model = Sequential()

    if embedding_layer:
        model.add(embedding_layer)
    else:
        model.add(
            Embedding(input_dim=input_dim,
                      output_dim=embedding_dim,
                      input_shape=(input_length, )))

    model.add(
        Bidirectional(
            LSTM(gru_units,
                 return_sequences=True,
                 dropout=gru_dropout,
                 recurrent_dropout=recurrent_dropout)))
    model.add(GlobalMaxPooling1D())
    model.add(Dense(32, activation='relu'))
    model.add(Dropout(dropout))

    model.add(Dense(num_classes, activation='sigmoid'))
    return model
コード例 #18
0
def build_model(word_vocab_size, word_vector_size, word_embedding_matrix,
                output_size, max_sequence_len, filters, filter_count,
                reg_lambda, activation, padding):
    word_embedding_layer = Embedding(word_vocab_size,
                                     word_vector_size,
                                     weights=[word_embedding_matrix],
                                     input_length=max_sequence_len,
                                     trainable=False)
    word_sequence_input = Input(shape=(max_sequence_len, ))
    word_embedded_sequences = word_embedding_layer(word_sequence_input)

    layers = []
    for filter_size in filters:
        layer = Conv1D(filter_count,
                       filter_size,
                       activation=activation,
                       padding=padding)(word_embedded_sequences)
        layer = GlobalMaxPooling1D()(layer)
        layers.append(layer)

    layer = Concatenate()(layers)
    preds = Dense(output_size, activation="softmax")(layer)
    model = Model(word_sequence_input, preds)

    return model
コード例 #19
0
    def cnn_model(self, x_train, x_test, y_train, y_test):
        classes_num = self.dataset.getParameters()["classes_num"]
        model = Sequential()
        model.add(Embedding(
            self.VOCAB_SIZE, self.EMBEDING_DIM, input_length=self.INPUT_LENGTH))
        model.add(Dropout(0.5))
        model.add(Conv1D(128, 5, activation='relu'))
        model.add(GlobalMaxPooling1D())
        model.add(Dense(64, activation='relu'))
        model.add(Dropout(0.5))
        model.add(Dense(classes_num, activation=self.ACTIVATION))
        model.compile(optimizer='adam',
                      loss=self.LOSSFUNC,
                      metrics=['accuracy'])
        es_callback = EarlyStopping(
            monitor='val_loss', patience=4)
        model.summary()

        history = model.fit(x_train, y_train,
                            epochs=self.EPOCHS,
                            verbose=1,
                            validation_data=(x_test, y_test),
                            batch_size=self.BATCH_SIZE, callbacks=[es_callback])
        loss, accuracy = model.evaluate(x_train, y_train, verbose=1)
        print("Training Accuracy: {:.4f}".format(accuracy))
        loss, accuracy = model.evaluate(x_test, y_test, verbose=1)
        print("Testing Accuracy:  {:.4f}".format(accuracy))
        return history
コード例 #20
0
    def get_model(self, pre_embeddings, dp_rate=-1.0, filter_sizes=[2, 3, 4]):
        """
        :param pre_embeddings:
        :param dp_rate: drop out rate
        :param filter_sizes: sizes of convolution kernels
        :return: the model
        """
        # Embedding part can try multichannel as same as origin paper
        embedding_layer = Embedding(self.max_features,  # 字典长度
                                    self.embedding_dims,  # 词向量维度
                                    weights=[pre_embeddings],  # 预训练的词向量
                                    input_length=self.maxlen,  # 每句话的最大长度
                                    trainable=False  # 是否在训练过程中更新词向量
                                    )
        input = Input((self.maxlen,))
        embedding = embedding_layer(input)
        convs = []
        for kernel_size in filter_sizes:
            c = Conv1D(NUM_FILTERS, kernel_size, activation='relu')(embedding)
            c = GlobalMaxPooling1D()(c)
            convs.append(c)
        x = Concatenate()(convs)

        if dp_rate > 0:
            # 加dropout层
            x = Dropout(dp_rate)(x)

        output = Dense(self.class_num, activation=self.last_activation)(x)
        model = Model(inputs=input, outputs=output)

        return model
コード例 #21
0
def model_5(filters, kernel_size, optimizer, strides):
    # then we can go ahead and set the parameter space

    model = Sequential()

    # we start off with an efficient embedding layer which maps
    # our vocab indices into embedding_dims dimensions
    model.add(Embedding(max_features, embedding_dims, input_length=maxlen))
    model.add(
        Conv1D((filters), (kernel_size),
               padding='valid',
               activation='relu',
               strides=strides))
    # we use max pooling:
    model.add(GlobalMaxPooling1D())

    # We add a vanilla hidden layer:
    model.add(Dense(hidden_dims))
    model.add(Dropout(dropout_default), )
    model.add(Activation('relu'))

    # We project onto a single unit output layer, and squash it with a sigmoid:
    model.add(Dense(output_size))
    model.add(Activation('sigmoid'))
    #optimizer = 'adam'
    model.compile(loss='categorical_crossentropy',
                  optimizer=optimizer,
                  metrics=['accuracy'])
    model.summary()
    return model
コード例 #22
0
    def get_model(self):
        input_current = Input((self.maxlen, ))
        input_left = Input((self.maxlen, ))
        input_right = Input((self.maxlen, ))

        embedder = Embedding(self.max_features,
                             self.embedding_dims,
                             input_length=self.maxlen)
        embedding_current = embedder(input_current)
        embedding_left = embedder(input_left)
        embedding_right = embedder(input_right)

        x_left = LSTM(128, return_sequences=True)(embedding_left)
        x_right = LSTM(128, return_sequences=True,
                       go_backwards=True)(embedding_right)
        x_right = Lambda(lambda x: K.reverse(x, axes=1))(x_right)
        x = Concatenate(axis=2)([x_left, embedding_current, x_right])

        x = Conv1D(64, kernel_size=1, activation='tanh')(x)
        x = GlobalMaxPooling1D()(x)

        output = Dense(self.class_num, activation=self.last_activation)(x)
        model = Model(inputs=[input_current, input_left, input_right],
                      outputs=output)
        return model
コード例 #23
0
def keras_model_fn(_, config):
    """
    Creating a CNN model for sentiment modeling

    """

    print("Creating a model...")

    embeddings_matrix = load_embeddings(
        config["embeddings_path"], config["embeddings_dictionary_size"],
        config["embeddings_vector_size"])

    cnn_model = Sequential()
    embeddings = Embedding(
        config["embeddings_dictionary_size"], config["embeddings_vector_size"],
        weights=[np.array(embeddings_matrix)], input_length=config["padding_size"], trainable=True)
    cnn_model.add(embeddings)
    cnn_model.add(Conv1D(filters=100, kernel_size=2, padding="valid", activation="relu", strides=1))
    cnn_model.add(GlobalMaxPooling1D())
    cnn_model.add(Dense(256, activation="relu"))
    cnn_model.add(Dense(1, activation="sigmoid"))

    cnn_model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

    return cnn_model
コード例 #24
0
def make_model(embed_size, embedding_matrix, max_features=20000, maxlen=50):
    inp = Input(shape=(maxlen, ))
    x = Embedding(max_features, embed_size, weights=[embedding_matrix])(inp)
    x = SpatialDropout1D(0.2)(x)
    x = Bidirectional(
        GRU(128,
            return_sequences=True,
            activation="tanh",
            recurrent_activation="sigmoid",
            use_bias="True",
            reset_after="True",
            unroll="False"))(x)
    # For CuDNN implementation with tf2
    x = Dropout(0.2)(x)
    x = Conv1D(64,
               kernel_size=3,
               padding="valid",
               kernel_initializer="glorot_uniform")(x)
    avg_pool = GlobalAveragePooling1D()(x)
    max_pool = GlobalMaxPooling1D()(x)
    x = concatenate([avg_pool, max_pool])
    preds = Dense(6, activation="sigmoid")(x)

    model = Model(inp, preds)
    model.compile(loss='binary_crossentropy',
                  optimizer=Adam(lr=1e-4),
                  metrics=['accuracy'])

    return model
コード例 #25
0
def get_model(embedding_matrix=embedding_matrix):
    words = Input(shape=(MAX_LEN, ))

    x = Embedding(*embedding_matrix.shape,
                  weights=[embedding_matrix],
                  trainable=False)(words)

    x = SpatialDropout1D(0.2)(x)
    x = Bidirectional(LSTM(LSTM_UNITS, return_sequences=True))(x)
    x = Bidirectional(LSTM(LSTM_UNITS, return_sequences=True))(x)

    hidden = concatenate([
        GlobalMaxPooling1D()(x),
        GlobalAveragePooling1D()(x),
    ])
    hidden = add(
        [hidden, Dense(DENSE_HIDDEN_UNITS, activation='relu')(hidden)])

    result = Dense(1, activation='sigmoid')(hidden)

    model = Model(inputs=words, outputs=result)
    model.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=[f1_score])
    return model
コード例 #26
0
def create_model_DNN(input_dim,
                     embedding_dim,
                     embedding_matrix,
                     pad_len,
                     trainable=False,
                     n1=64,
                     n2=32,
                     kr=None,
                     br=None):
    Simple = Sequential()
    embedding_layer = Simple.add(
        Embedding(input_dim=input_dim,
                  output_dim=embedding_dim,
                  weights=[embedding_matrix],
                  input_length=pad_len,
                  trainable=trainable))
    Simple.add(GlobalMaxPooling1D())
    Simple.add(
        Dense(n1,
              kernel_regularizer=kr,
              bias_regularizer=br,
              activation='relu'))
    Simple.add(
        Dense(n2,
              kernel_regularizer=kr,
              bias_regularizer=br,
              activation='relu'))
    Simple.add(Dense(4, activation='softmax'))
    Simple.compile(optimizer='adam',
                   loss="sparse_categorical_crossentropy",
                   metrics=['acc'])
    return Simple
コード例 #27
0
    def __init__(self,
                 feature_columns,
                 mode,
                 attention_hidden_unit=64,
                 embed_reg=1e-4):
        """
        AFM architecture
        :param feature_columns: dense_feature_columns and sparse_feature_columns
        :param mode: 'max'(MAX Pooling) or 'avg'(Average Pooling) or 'att'(Attention)
        :param attention_hidden_unit: hidden unit, if mode == 'att'
        :param embed_reg: the regularizer of embedding
        """
        super(AFM, self).__init__()
        self.dense_feature_columns, self.sparse_feature_columns = feature_columns
        self.mode = mode
        self.embed_layers = {
            'embed_' + str(i):
            Embedding(input_dim=feat['feat_num'],
                      input_length=1,
                      output_dim=feat['embed_dim'],
                      embeddings_initializer='random_uniform',
                      embeddings_regularizer=l2(embed_reg))
            for i, feat in enumerate(self.sparse_feature_columns)
        }
        if self.mode == 'max':
            self.max = GlobalMaxPooling1D()
        elif self.mode == 'avg':
            self.avg = GlobalAveragePooling1D()
        else:
            self.attention_dense = Dense(units=attention_hidden_unit,
                                         activation='relu')
            self.attention_dense2 = Dense(units=1, activation=None)

        self.dense = Dense(units=1, activation=None)
        self.concat = Concatenate(axis=-1)
コード例 #28
0
def create_model_CNN(input_dim,
                     embedding_dim,
                     embedding_matrix,
                     pad_len,
                     trainable,
                     n1,
                     k,
                     d=0.0,
                     kr=None,
                     br=None):
    myCNN = Sequential()
    myCNN.add(
        Embedding(input_dim=input_dim,
                  output_dim=embedding_dim,
                  weights=[embedding_matrix],
                  input_length=pad_len,
                  trainable=trainable))
    myCNN.add(
        Conv1D(n1,
               kernel_size=k,
               kernel_regularizer=kr,
               bias_regularizer=br,
               activation='relu'))
    myCNN.add(GlobalMaxPooling1D())
    myCNN.add(Dropout(d))
    myCNN.add(Dense(4, activation='softmax'))
    myCNN.compile(optimizer='adam',
                  loss="sparse_categorical_crossentropy",
                  metrics=['acc'])
    return myCNN
コード例 #29
0
ファイル: app.py プロジェクト: OitaGG/diploma
def create_model(num_labels, units_gru, dense_size):
    dropout_rate = 0.5
    rec_dropout_rate = 0.2

    inp = Input(shape=(WORD_LIMIT, EMBEDDING_DIM))
    output = Dropout(rate=dropout_rate)(inp)
    output, state1, state2 = Bidirectional(
        GRU(units_gru,
            activation='tanh',
            return_sequences=True,
            return_state=True,
            dropout=dropout_rate,
            recurrent_dropout=rec_dropout_rate))(output)
    output1 = GlobalMaxPooling1D()(output)
    output2 = GlobalAveragePooling1D()(output)
    output = concatenate([output1, output2, state1, state2])
    output = Dropout(rate=dropout_rate)(output)
    output = Dense(dense_size, activation=None)(output)
    output = Activation('relu')(output)
    output = Dropout(rate=dropout_rate)(output)
    output = Dense(num_labels, activation=None)(output)
    act_output = Activation("sigmoid")(output)
    model = Model(inputs=inp, outputs=act_output)
    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])

    return model
コード例 #30
0
def build_model(sent_length, embeddings_weight, class_num):
    content = Input(shape=(sent_length, ), dtype='int32')
    embedding = Embedding(name="sentence_cuted",
                          input_dim=embeddings_weight.shape[0],
                          weights=[embeddings_weight],
                          output_dim=embeddings_weight.shape[1],
                          trainable=False)

    x = SpatialDropout1D(0.2)(embedding(content))

    x = Bidirectional(GRU(200, return_sequences=True))(x)
    #     x = Bidirectional(GRU(200, return_sequences=True))(x)

    avg_pool = GlobalAveragePooling1D()(x)  # 全军平均池化
    max_pool = GlobalMaxPooling1D()(x)  # 全局最大池化

    conc = concatenate([avg_pool, max_pool])  # 特征放到一起,

    x = Dense(1000)(conc)  # 全连接层
    x = BatchNormalization()(x)
    x = Activation(activation="relu")(x)
    x = Dropout(0.2)(x)
    x = Dense(500)(x)
    x = BatchNormalization()(x)
    x = Activation(activation="relu")(x)
    output = Dense(class_num, activation="softmax")(x)

    model = tf.keras.models.Model(inputs=content, outputs=output)
    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
    return model