示例#1
0
def get_keras_with_word2vec(name, data_dto, extra_param=None, verbose=False):

    vectorize_data = Vectorized(data_dto)
    vectorize_data.initialize_with_word2vec()

    model, path = get_saved_model(name)
    if (model == None):

        model = Sequential()
        model.add(Dense(32, activation='relu', input_dim=data_dto.vocab_size))
        model.add(
            Dense(len(vectorize_data.data_dto.target_names),
                  activation='softmax'))

        model.compile(optimizer='rmsprop',
                      loss='binary_crossentropy',
                      metrics=['accuracy'])

        if (verbose):
            model.summary()

        model.fit(vectorize_data.X_train,
                  vectorize_data.y_train,
                  epochs=9,
                  batch_size=32,
                  validation_data=(vectorize_data.X_test,
                                   vectorize_data.y_test),
                  verbose=verbose)

        model.save(path)

    return KerasClassifierWithWord2Vec(name, model, vectorize_data, verbose)
示例#2
0
def get_simple_keras_classifier(name, data_dto, count_vectorizer_dto=None, verbose=False):

    if count_vectorizer_dto == None:
        count_vectorizer_dto = CountVectorizerDTO()

    vectorize_data = Vectorized(data_dto)
    vectorize_data.initialize_with_count_vectorizer(count_vectorizer_dto)

    model, path = get_saved_model(name)
    if (model == None):
        model = Sequential()
        model.add(Dense(10, input_dim=vectorize_data.input_dim, activation='relu'))
        model.add(Dense(len(vectorize_data.data_dto.target_names), activation='softmax', kernel_initializer='uniform')) 

        # categorial is the way to go for multiple possible categorys as results, instead of binary
        model.compile(loss='categorical_crossentropy',  
                    optimizer='adam', 
                    metrics=['accuracy'])
        
        if (verbose):
            model.summary()

        history = model.fit(vectorize_data.X_train, vectorize_data.y_train,
                        epochs=100,
                        verbose=verbose,
                        validation_data=(vectorize_data.X_test, vectorize_data.y_test),
                        batch_size=100)
    
        model.save(path)

        if (verbose):
            print (history)

    return KerasClassifierWithVectorizer(name, model, vectorize_data, verbose)
示例#3
0
def get_denser_keras_classifier_with_tokenizer(name,
                                               data_dto,
                                               keras_tokenizer_dto=None,
                                               verbose=False):

    if (keras_tokenizer_dto == None):
        keras_tokenizer_dto = KerasTokenizerDTO()

    vectorize_data = Vectorized(data_dto)
    vectorize_data.initialize_with_keras_tokenizer(keras_tokenizer_dto)

    model, path = get_saved_model(name)
    if (model == None):
        model = Sequential()

        model.add(
            Dense(512, input_shape=(vectorize_data.data_dto.vocab_size, )))
        model.add(Activation('relu'))
        model.add(Dropout(0.3))
        model.add(Dense(512))
        model.add(Activation('relu'))
        model.add(Dropout(0.3))
        model.add(Dense(len(vectorize_data.data_dto.target_names)))
        model.add(Activation('softmax'))

        # categorial is the way to go for multiple possible categorys as results, instead of binary
        model.compile(loss='categorical_crossentropy',
                      optimizer='adam',
                      metrics=['accuracy'])

        if (verbose):
            model.summary()

        history = model.fit(vectorize_data.X_train,
                            vectorize_data.y_train,
                            epochs=30,
                            batch_size=100,
                            verbose=verbose,
                            validation_split=0.1)

        model.save(path)

        if (verbose):
            print(history)

    return KerasClassifierWithTokenizer(name, model, vectorize_data, verbose)