예제 #1
0
        for layer in base_model.layers:
            layer.trainable = False

        # compile the model (should be done *after* setting layers to non-trainable)
        model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc', 'top_k_categorical_accuracy'])

    train_steps = int(math.ceil(nb_train_samples / batch_size))
    validation_steps = int(math.ceil(nb_validation_samples / batch_size))
    # train_steps = nb_train_samples // batch_size
    # validation_steps = nb_validation_samples // batch_size

    bn_start_time = datetime.now()
    print("[Info] Model Bottlenecking started at: {}".format(bn_start_time))

    filepath = training_checkpoint_dir + "/model-{epoch:02d}-{val_acc:.2f}-{val_loss:.2f}.h5"
    checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False, mode='min')

    early_stop = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=5, restore_best_weights=True)

    reduce_lr = ReduceLROnPlateau(patience=3)

    figPath = os.path.join(model_dir, 'checkpoints', 'progress', 'train.png')
    jsonPath = os.path.join(model_dir, 'checkpoints', 'progress', 'train.json')
    train_monitor = TrainingMonitor(figPath, jsonPath=jsonPath, startAt=init_epoch_train)
    # TypeError: Object of type float32 is not JSON serializable
    # train_monitor = TrainingMonitor(figPath)

    callbacks_list = [early_stop, reduce_lr, checkpoint, train_monitor]

    history = model.fit_generator(
                train_generator,
예제 #2
0
def train(args):
    src_root = args.src_root
    sr = args.sample_rate
    dt = args.delta_time
    batch_size = args.batch_size
    model_type = args.model_type
    params = {'N_CLASSES': len(os.listdir(args.src_root)), 'SR': sr, 'DT': dt}
    models = {
        'conv1d': Conv1D(**params),
        'conv2d': Conv2D(**params),
        'lstm': LSTM(**params)
    }
    assert model_type in models.keys(), '{} not an available model'.format(
        model_type)
    csv_path = os.path.join('logs', '{}_history.csv'.format(model_type))

    wav_paths = glob('{}/**'.format(src_root), recursive=True)
    wav_paths = [x.replace(os.sep, '/') for x in wav_paths if '.wav' in x]
    classes = sorted(os.listdir(args.src_root))
    le = LabelEncoder()
    le.fit(classes)
    labels = [os.path.split(x)[0].split('/')[-1] for x in wav_paths]
    labels = le.transform(labels)
    wav_train, wav_val, label_train, label_val = train_test_split(
        wav_paths, labels, test_size=0.1, random_state=0)

    assert len(
        label_train
    ) >= args.batch_size, 'Number of train samples must be >= batch_size'
    if len(set(label_train)) != params['N_CLASSES']:
        warnings.warn(
            'Found {}/{} classes in training data. Increase data size or change random_state.'
            .format(len(set(label_train)), params['N_CLASSES']))
    if len(set(label_val)) != params['N_CLASSES']:
        warnings.warn(
            'Found {}/{} classes in validation data. Increase data size or change random_state.'
            .format(len(set(label_val)), params['N_CLASSES']))

    tg = DataGenerator(wav_train,
                       label_train,
                       sr,
                       dt,
                       params['N_CLASSES'],
                       batch_size=batch_size)
    vg = DataGenerator(wav_val,
                       label_val,
                       sr,
                       dt,
                       params['N_CLASSES'],
                       batch_size=batch_size)
    model = models[model_type]
    cp = ModelCheckpoint('models/{}.h5'.format(model_type),
                         monitor='val_loss',
                         save_best_only=True,
                         save_weights_only=False,
                         mode='auto',
                         save_freq='epoch',
                         verbose=1)
    csv_logger = CSVLogger(csv_path, append=False)
    model.fit(tg,
              validation_data=vg,
              epochs=30,
              verbose=1,
              callbacks=[csv_logger, cp])
예제 #3
0
# model.add(Conv2D(9,(2,3)))
# model.add(Conv2D(8,2))
model.add(Flatten())
model.add(Dense(1))
model.add(Dense(1, activation='sigmoid'))  #이진분류일 때 activation을 sigmoid로 사용
# linear -무한 ~ 무한 / relu 0 ~ 무한 / sigmoid 0 ~ 1

# 3. 컴파일, 훈련
# mean_squared_error                          #accuracy, mae
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
# 이진분류일 때 loss를 binary_crossentropy로 사용  # metrics에 가급적 acc로 사용
# mse는 회귀모델
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
modelpath = '../data/modelcheckpoint/k46_6_cancer_{epoch:02d}-{val_loss:.4f}.hdf5'
cp = ModelCheckpoint(filepath=modelpath,
                     monitor='val_loss',
                     save_best_only=True,
                     mode='auto')

early_stopping = EarlyStopping(monitor='loss', patience=20, mode='auto')

hist = model.fit(x_train,
                 y_train,
                 epochs=500,
                 batch_size=10,
                 validation_data=(x_val, y_val),
                 callbacks=[early_stopping, cp])

loss = model.evaluate(x_test, y_test)
print(loss)

# sigmoid 0~1 이므로 0.5 이상 = 1 미만 = 0 으로 설정
예제 #4
0
    sent1 = Embedding(vocab_size, EMBEDDING_DIM,
                      input_length=MAX_LEN)(text_input)
    sent3 = Bidirectional(LSTM(128, return_sequences=False))(sent1)

    decoder1 = Add()([im2, sent3])
    pred = Dense(vocab_size, activation='softmax')(decoder1)

    model = Model(inputs=[image_input, text_input], outputs=pred)
    model.compile(loss='categorical_crossentropy',
                  optimizer="Adam",
                  metrics=['accuracy'])

    model.summary()

    callbacks = [
        EarlyStopping(patience=10, verbose=1),
        ReduceLROnPlateau(factor=0.1, patience=3, min_lr=0.00001, verbose=1),
        ModelCheckpoint(os.path.join(
            os.path.join(model_workspace_dir, 'weights_best.hdf5')),
                        verbose=1,
                        save_best_only=False),
        CSVLogger(os.path.join(model_workspace_dir, 'training.csv')),
        PerformanceMetrics(os.path.join(model_workspace_dir,
                                        'performance.csv')),
    ]

    model.fit_generator(generator=training_generator,
                        validation_data=validation_generator,
                        epochs=100,
                        callbacks=callbacks)
예제 #5
0
파일: main.py 프로젝트: UbiOps/cookbook
def main(cfg):
    if cfg.wandb.project:
        import wandb
        from wandb.keras import WandbCallback
        wandb.init(project=cfg.wandb.project)
        callbacks = [WandbCallback()]
    else:
        callbacks = []
        
    data_path = Path("/pfs/faces/data/imdb_crop")
    #data_path = Path("/home/raoulfasel/Documents/pachyderm/age_gender_estimation/data/imdb_crop")
    
    csv_path = Path(to_absolute_path("./")).joinpath("meta", f"{cfg.data.db}.csv")
    #csv_path = Path(to_absolute_path("/pfs/faces")).joinpath("meta", f"{cfg.data.db}.csv")
    print(csv_path)
    df = pd.read_csv(str(csv_path))
    train, val = train_test_split(df, random_state=42, test_size=0.1)
    train_gen = ImageSequence(cfg, train, "train", data_path)
    val_gen = ImageSequence(cfg, val, "val", data_path)

    strategy = tf.distribute.MirroredStrategy()

    with strategy.scope():
        model = get_model(cfg)
        opt = get_optimizer(cfg)
        scheduler = get_scheduler(cfg)
        model.compile(optimizer=opt,
                      loss=["sparse_categorical_crossentropy", "sparse_categorical_crossentropy"],
                      metrics=['accuracy'])

    #checkpoint_dir = Path(to_absolute_path("age_gender_estimation")).joinpath("checkpoint")
    checkpoint_dir = Path(to_absolute_path("/pfs/build")).joinpath("checkpoint")

    print(checkpoint_dir)
    checkpoint_dir.mkdir(exist_ok=True)
    filename = "_".join([cfg.model.model_name,
                         str(cfg.model.img_size),
                         "weights.{epoch:02d}-{val_loss:.2f}.hdf5"])
    callbacks.extend([
        LearningRateScheduler(schedule=scheduler),
        ModelCheckpoint(str(checkpoint_dir) + "/" + filename,
                        monitor="val_loss",
                        verbose=1,
                        save_best_only=True,
                        mode="auto")
    ])

    model.fit(train_gen, epochs=cfg.train.epochs, callbacks=callbacks, validation_data=val_gen,
              workers=multiprocessing.cpu_count())
    
    model.save("tensorflow_deployment_package/tensorflow_model.h5")

    with open('/opt/ubiops/token', 'r') as reader:
        API_TOKEN = reader.read()
    client = ubiops.ApiClient(ubiops.Configuration(api_key={'Authorization': API_TOKEN}, 
                                               host='https://api.ubiops.com/v2.1'))
    api = ubiops.CoreApi(client)
    
    # Create the deployment
    deployment_template = ubiops.DeploymentCreate(
        name=DEPLOYMENT_NAME,
        description='Tensorflow deployment',
        input_type='structured',
        output_type='structured',
        input_fields=[
            ubiops.DeploymentInputFieldCreate(
                name='input_image',
                data_type='blob',
            ),
        ],
        output_fields=[
            ubiops.DeploymentOutputFieldCreate(
                name='output_image',
                data_type='blob'
            ),
        ],
        labels={"demo": "tensorflow"}
    )

    api.deployments_create(
        project_name=PROJECT_NAME,
        data=deployment_template
    )

    # Create the version
    version_template = ubiops.DeploymentVersionCreate(
        version=DEPLOYMENT_VERSION,
        language='python3.8',
        instance_type="2048mb",
        minimum_instances=0,
        maximum_instances=1,
        maximum_idle_time=1800 # = 30 minutes
    )

    api.deployment_versions_create(
        project_name=PROJECT_NAME,
        deployment_name=DEPLOYMENT_NAME,
        data=version_template
    )

    # Zip the deployment package
    shutil.make_archive('tensorflow_deployment_package', 'zip', '.', 'tensorflow_deployment_package')

    # Upload the zipped deployment package
    file_upload_result =api.revisions_file_upload(
        project_name=PROJECT_NAME,
        deployment_name=DEPLOYMENT_NAME,
        version=DEPLOYMENT_VERSION,
        file='tensorflow_deployment_package.zip'
    )
예제 #6
0
    def train(self, dataloader, mode='eager'):
        print("-" * 35)
        print(f"Starting training {self.use_model} in {mode} mode")
        print("-" * 35)
        self.build_model(training=True)
        dataset = dataloader.get_samples()
        dataset.pop('scalers')
        if self.custom_model_params['netdesign'] == 'oneshot':
            inputs, targets = tuple(dataset['inputs'][0:2]), dataset['targets']
        else:
            inputs, targets = tuple(dataset['inputs']), dataset['targets']

        if mode == 'fit':
            self.tsmodel.compile(loss=self.loss_fn,
                                 optimizer=self.optimizer_fn)
            callbacks = [
                TensorBoard(log_dir=f"{self.paths['logs']}/{self.use_model}"),
                ModelCheckpoint(
                    f"{self.paths['ckpts']}/{self.use_model}_weights.h5",
                    verbose=1,
                    save_weights_only=True)
            ]

            self.tsmodel.fit(x=inputs,
                             y=targets,
                             batch_size=self.params['batchsize'],
                             epochs=self.params['epochs'],
                             validation_split=0.2,
                             shuffle=True,
                             callbacks=callbacks)

        elif mode == 'eager':
            self.summarywriter = tf.summary.create_file_writer(
                f"{self.paths['logs']}/{self.use_model}")
            self.trnsteps = tf.Variable(1, trainable=False, dtype=tf.int64)
            self.valsteps = tf.Variable(1, trainable=False, dtype=tf.int64)
            trnloss = avgmeter()
            valloss = avgmeter()

            nbatches = len(dataset['targets']) // self.params['batchsize']
            dataset = tf.data.Dataset.from_tensor_slices({
                'inputs': inputs,
                'targets': targets
            }).shuffle(nbatches, reshuffle_each_iteration=False).batch(
                self.params['batchsize'])

            comparisonmetric = 1e9
            for epoch in range(1, self.params['epochs'] + 1):
                trnloss.reset()
                valloss.reset()
                with tqdm(total=nbatches) as bar:
                    bar.set_description(f'Epoch:{epoch}')
                    for index, batchdata in dataset.enumerate():
                        if (index + 1) / nbatches < 0.8:
                            batchloss = self.trnstep(batchdata)
                            trnloss.update(batchloss.numpy(),
                                           self.params['batchsize'])
                            bar.update(1)
                            bar.set_postfix(trainloss=trnloss.avg,
                                            validloss=valloss.avg)
                            with self.summarywriter.as_default():
                                tf.summary.scalar('trainloss-iterations',
                                                  batchloss,
                                                  step=self.trnsteps)
                        else:
                            batchloss = self.valstep(batchdata)
                            valloss.update(batchloss.numpy(),
                                           self.params['batchsize'])
                            bar.update(1)
                            bar.set_postfix(trainloss=trnloss.avg,
                                            validloss=valloss.avg)
                            with self.summarywriter.as_default():
                                tf.summary.scalar('validationloss-iterations',
                                                  batchloss,
                                                  step=self.valsteps)

                    with self.summarywriter.as_default():
                        tf.summary.scalar('Lossfunction/trn',
                                          trnloss.avg,
                                          step=epoch)
                        tf.summary.scalar('Lossfunction/val',
                                          valloss.avg,
                                          step=epoch)

                if valloss.avg < comparisonmetric:
                    self.tsmodel.save_weights(
                        f"{self.paths['ckpts']}/{self.use_model}_weights.h5")
                    comparisonmetric = valloss.avg
                else:
                    print('Validation loss increased!')

        else:
            raise ValueError(
                f"Unsupported training mode: {mode}, choose 'eager' or 'fit'")
        self.exportmodel()
예제 #7
0
def quant_ft(build_dir, batchsize, learnrate, epochs, max_classes):
    '''
    Quantize & fine-tune the floating-point model
    Save to HDF5 file
    '''
    def step_decay(epoch):
        '''
        Learning rate scheduler used by callback
        Reduces learning rate depending on number of epochs
        '''
        lr = learnrate
        if epoch > 65:
            lr /= 10
        return lr

    float_dir = build_dir + '/float_model'
    quant_ft_dir = build_dir + '/quant_ft_model'
    tfrec_train = build_dir + '/tfrec_train'
    tfrec_val = build_dir + '/tfrec_val'

    print('\n' + DIVIDER)
    print('Quantization & Fine-tune')
    print(DIVIDER + '\n')

    # load the floating point trained model
    print(' Loading floating-point model from', float_dir + '/float_model.h5')
    float_model = load_model(float_dir + '/float_model.h5', compile=False)

    # get input dimensions of the floating-point model
    height = float_model.input_shape[1]
    width = float_model.input_shape[2]
    chans = float_model.input_shape[3]
    print(' Input dimensions: height:', height, ' width:', width, 'channels:',
          chans)

    # Quantization-aware training model
    quantizer = vitis_quantize.VitisQuantizer(float_model)
    ft_model = quantizer.get_qat_model()
    '''
    tf.data pipelines
    '''
    train_dataset = input_fn(tfrec_train, batchsize, True)
    test_dataset = input_fn(tfrec_val, batchsize, False)
    '''
    Call backs
    '''
    chkpt_call = ModelCheckpoint(filepath=os.path.join(quant_ft_dir,
                                                       'quant_ft.h5'),
                                 monitor='val_accuracy',
                                 verbose=1,
                                 save_best_only=True)
    lr_scheduler_call = LearningRateScheduler(schedule=step_decay, verbose=1)
    callbacks_list = [chkpt_call, lr_scheduler_call]
    '''
    Compile model
    Adam optimizer to change weights & biases
    Loss function is sparse categorical crossentropy
    '''
    ft_model.compile(optimizer=Adam(learning_rate=learnrate),
                     loss=SparseCategoricalCrossentropy(from_logits=True),
                     metrics=['accuracy'])
    '''
    Training
    '''
    print('\n' + DIVIDER)
    print(' Training model with training set..')
    print(DIVIDER)

    # make folder for saving trained model checkpoint
    os.makedirs(quant_ft_dir, exist_ok=True)

    # run training
    train_hist = ft_model.fit(train_dataset,
                              epochs=epochs,
                              steps_per_epoch=(1300 * max_classes) //
                              batchsize,
                              validation_data=test_dataset,
                              validation_steps=None,
                              callbacks=callbacks_list,
                              verbose=1)
    '''
    Evaluate quantized model
    '''
    print('\n' + DIVIDER)
    print('Evaluating quantized model..')
    print(DIVIDER + '\n')

    # reload the best checkpoint and evaluate it
    with vitis_quantize.quantize_scope():
        eval_model = load_model(quant_ft_dir + '/quant_ft.h5', compile=False)

    eval_model.compile(loss=SparseCategoricalCrossentropy(from_logits=True),
                       metrics=['accuracy'])

    scores = eval_model.evaluate(test_dataset, steps=None, verbose=0)

    print(' Quantized model accuracy: {0:.4f}'.format(scores[1] * 100), '%')
    print('\n' + DIVIDER)

    return
예제 #8
0
파일: train.py 프로젝트: yurisa2/rbmm_tsf
def train_model(x,
                y,
                model,
                name="noname",
                tboard=False,
                ckpt=False,
                epochs=10,
                batch=3,
                val_split=0.3,
                estop=False,
                estop_patience=10,
                estop_min_delta=0.0001,
                estop_monitor='val_acc'):

    from datetime import datetime
    import os
    from tensorflow.keras.callbacks import ModelCheckpoint
    from tensorflow.keras.callbacks import TensorBoard
    from tensorflow.keras.callbacks import EarlyStopping

    callbacks = []

    if estop is True:
        earlystop_callback = EarlyStopping(monitor=estop_monitor,
                                           min_delta=estop_min_delta,
                                           patience=estop_patience)
        callbacks.append(earlystop_callback)
        pass

    if tboard is True:
        logdir = 'logs/' + datetime.now().strftime("%Y%m%d-%H%M%S-") + name
        if not os.path.exists('logs'):
            os.makedirs('logs')

        os.mkdir(logdir)
        logdir = os.path.join(logdir)

        tensorboard_callback = TensorBoard(log_dir=logdir,
                                           histogram_freq=1,
                                           profile_batch=100000000)

        callbacks.append(tensorboard_callback)
        pass

    if ckpt is True:

        if not os.path.exists('checkpoints'):
            os.makedirs('checkpoints')

        ckpf_dir = os.path.join(
            'checkpoints',
            datetime.now().strftime("%Y%m%d-%H%M%S-") + name,
        )
        os.makedirs(ckpf_dir)

        ckpf = os.path.join('checkpoints',
                            datetime.now().strftime("%Y%m%d-%H%M%S-") + name,
                            name + '.hdf5')

        checkpointer = ModelCheckpoint(filepath=ckpf,
                                       verbose=1,
                                       save_best_only=True)

        callbacks.append(checkpointer)
        pass

    hist = model.fit(
        x,
        y,
        batch_size=batch,
        epochs=epochs,
        validation_split=val_split,
        # validation_data=(x_test, y_test_one_hot),
        callbacks=callbacks,
    )
    return hist
# initialize the optimizer and model
print("[INFO] compiling model ...")
opt = SGD(lr=0.01, decay=0.01 / 40, momentum=0.9, nesterov=True)
model = MiniVGGNet.build(width=32, height=32, depth=3, classes=10)
model.compile(loss="categorical_crossentropy",
              optimizer=opt,
              metrics=["accuracy"])

# construct the callback to save only the *best* model to disk based on the validation loss
fname = os.path.sep.join(
    [args["weights"], "weights-{epoch:03d}-{val_loss:.4f}.hdf5"])

# The mode parameter controls whether the ModelCheckpoint should be looking for values that minimize our metric or maximize it

checkpoint = ModelCheckpoint(fname,
                             monitor="val_loss",
                             mode="min",
                             save_best_only=True,
                             verbose=1)
callbacks = [checkpoint]

# train the network
print("[INFO] training network ...")
H = model.fit(trainX,
              trainY,
              validation_data=(testX, testY),
              batch_size=64,
              epochs=40,
              callbacks=callbacks,
              verbose=2)
예제 #10
0
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('elu'))
model.add(Dropout(0.5))
model.add(Dense(7, activation='softmax'))

model.compile(Adam(lr=0.001, decay=1e-6),
              loss="categorical_crossentropy",
              metrics=["accuracy"])

# checkpoints
checkpoint = ModelCheckpoint(model_filename_just_faces,
                             monitor='val_accuracy',
                             save_best_only=True,
                             mode='max',
                             verbose=1)
#checkpoint = ModelCheckpoint(model_filename, monitor='val_loss', save_best_only=True, mode='min', verbose=1)
callbacks_list = [checkpoint]

STEP_SIZE_TRAIN = train_generator.n // train_generator.batch_size
STEP_SIZE_VALID = valid_generator.n // valid_generator.batch_size
model.fit_generator(generator=train_generator,
                    steps_per_epoch=STEP_SIZE_TRAIN,
                    validation_data=valid_generator,
                    validation_steps=STEP_SIZE_VALID,
                    callbacks=callbacks_list,
                    epochs=30)
예제 #11
0
def main():
    args = parser.parse_args()
    image_names = os.listdir(args.data_root) #the best way is to use sorted list,i.e., sorted()
    image_names = sorted(image_names)[:-1]
    img_path = [os.path.join(args.data_root,x) for x in image_names]
    person_id_original_list = [x[:4] for x in image_names]
    num_person_ids = len(set(person_id_original_list))
    print('Number of Person IDs is {}'.format(num_person_ids))
    id_encoder = LabelEncoder()
    id_encoder.fit(person_id_original_list)
    person_id_encoded = id_encoder.transform(person_id_original_list)
    train_img_path, val_img_path, train_person_ids, val_person_ids = train_test_split(
        img_path, person_id_encoded, test_size=0.2, random_state=42)

    # model
    cnn_model = MobileNetV2(include_top=False, alpha=0.5, weights='imagenet',
                            input_shape=(args.img_height,args.img_width,3), pooling='max')
    global_pool = cnn_model.layers[-1].output
    normalized_global_pool = Lambda(lambda x: K.l2_normalize(x, axis=1), name='triplet')(global_pool)
    if args.USE_BNNeck:
        global_pool_bn = BatchNormalization(name= 'feature_bn')(global_pool)
        pred = Dense(num_person_ids, activation='softmax')(global_pool_bn)
    else:
        pred = Dense(num_person_ids, activation='softmax')(global_pool)

    triplet_model = Model(inputs=cnn_model.input, outputs=[pred, normalized_global_pool])


    # model compile
    if args.USE_Semihard:
        triplet_loss = tripletSemihardloss
    else:
        triplet_loss = triplet_hard_loss
    optimizer = opt_ways[args.optimizer](learning_rate=args.learning_rate)
    if args.USE_Label_Smoothing:
        triplet_model.compile(loss=[cross_entropy_label_smoothing, triplet_loss], optimizer=optimizer,
                            loss_weights=[1, 1],
                            metrics=['accuracy'])
    else:
        triplet_model.compile(loss=['categorical_crossentropy', triplet_loss], optimizer=optimizer,
                            loss_weights=[1, 1],
                            metrics=['accuracy'])
    #triplet_model.load_weights('triplet_hard_weights.h5')
    triplet_model.summary()
    # save model
    model_path = os.path.join(args.log_dir, 'triplet_semihard_weights.h5')
    checkpoint = ModelCheckpoint(model_path, monitor='val_dense_accuracy',
                                 verbose=1, save_best_only=True, mode='auto')
    reduce_lr = LearningRateScheduler(lr_decay_warmup, verbose=1)
    # data loader
    train_generator = generator_batch_triplet_hard(train_img_path, train_person_ids,
                    num_person_ids, args.img_width, args.img_height, args.batch_size, args.num_instances,
                                      shuffle=True, aug=True)
    val_generator = generator_batch_triplet_hard(val_img_path, val_person_ids,
                    num_person_ids, args.img_width, args.img_height, args.batch_size, args.num_instances,
                                      shuffle=False, aug=False)

    # fit data to model
    history = triplet_model.fit(
                        train_generator,
                        steps_per_epoch=len(train_img_path)//args.batch_size,
                        validation_data=val_generator,
                        validation_steps=len(val_img_path)//args.batch_size,
                        verbose=2,
                        shuffle=True,
                        epochs=args.num_epochs,
                        callbacks=[checkpoint, reduce_lr])
    #print(history.history)

    # Plot training & validation accuracy and loss values
    fig, ax = plt.subplots(2,1)
    ax[0].plot(history.history['dense_loss'], color='b', label='cross-entropy loss')
    ax[0].plot(history.history['triplet_loss'], color='r', label='triplet loss')
    ax[0].plot(history.history['val_dense_loss'], color='g', label='val cross-entropy loss')
    ax[0].plot(history.history['val_triplet_loss'], color='y', label='val triplet loss')
    legend = ax[0].legend(loc='best', shadow=True)

    ax[1].plot(history.history['dense_accuracy'], color='b', label='Training accuracy')
    ax[1].plot(history.history['val_dense_accuracy'], color='r', label='Validation accuracy')
    legend = ax[1].legend(loc='best', shadow=True)
    plt.savefig(os.path.join(args.log_dir, 'loss_acc_triplet_semihard.jpg'))

    #evaluation
    print("Evaluating model...")
    Evaluate(args, model_path=model_path, batch_size=32)
예제 #12
0
    mask = tf.math.logical_not(tf.math.equal(real, 0))
    mask = tf.expand_dims(tf.cast(mask, dtype=pred.dtype), axis=-1)
    pred *= mask
    acc = train_accuracy(real, pred)

    return tf.reduce_mean(acc)

model = Transformer(**kargs) # dictionary로 다룸
model.compile(optimizer=tf.keras.optimizers.Adam(1e-4),
              loss=loss,
              metrics=[accuracy])

# Callback 선언
# overfitting을 막기 위한 ealrystop 추가
earlystop_callback = EarlyStopping(monitor='val_accuracy', min_delta=0.0001, patience=10)
# min_delta: the threshold that triggers the termination (acc should at least improve 0.0001)
# patience: no improvment epochs (patience = 1, 1번 이상 상승이 없으면 종료)

checkpoint_path = DATA_OUT_PATH + model_name + '/weights.h5'
checkpoint_dir = os.path.dirname(checkpoint_path)

# Create path if exists
if os.path.exists(checkpoint_dir):
    print("{} -- Folder already exists \n".format(checkpoint_dir))
else:
    os.makedirs(checkpoint_dir, exist_ok=True)
    print("{} -- Folder create complete \n".format(checkpoint_dir))

cp_callback = ModelCheckpoint(
    checkpoint_path, monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=True)
예제 #13
0
    train_label = to_categorical(train_label, len(constants.CATE_LIST))
    print('train_shape: ', train_data.shape)

    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=[
                      tf.keras.metrics.categorical_accuracy,
                      tf.keras.metrics.Recall()
                  ])

    cur_time = int(time.strftime('%Y%m%d%H%M', time.localtime(time.time())))
    model_path = '../../model/CNN_model/{}.h5'.format(cur_time)
    log_name = '{}'.format(cur_time)

    model_saver = ModelCheckpoint(filepath=model_path,
                                  verbose=2,
                                  save_best_only=True)

    early_stopper = EarlyStopping(monitor='val_loss',
                                  min_delta=0,
                                  patience=100,
                                  verbose=2,
                                  mode='min',
                                  baseline=None,
                                  restore_best_weights=True)

    tensor_board = TensorBoard(log_dir=r'..\..\log\{}'.format(log_name))

    result = model.fit(train_data,
                       train_label,
                       batch_size=128,
예제 #14
0
def _main(path_dataset,
          path_anchors,
          path_weights=None,
          path_output='.',
          path_config=None,
          path_classes=None,
          nb_gpu=1,
          **kwargs):

    config = load_config(path_config, DEFAULT_CONFIG)
    anchors = get_anchors(path_anchors)
    nb_classes = get_nb_classes(path_dataset)
    logging.info('Using %i classes', nb_classes)
    _export_classes(get_dataset_class_names(path_dataset, path_classes),
                    path_output)

    # make sure you know what you freeze
    model, bottleneck_model, last_layer_model = create_model_bottleneck(
        config['image-size'],
        anchors,
        nb_classes,
        freeze_body=2,
        weights_path=path_weights,
        nb_gpu=nb_gpu)
    # if create blank use image-size, else take loaded from model file
    config['image-size'] = model._input_layers[0].input_shape[1:3]

    log_tb = TensorBoard(log_dir=path_output)
    checkpoint = ModelCheckpoint(os.path.join(path_output, NAME_CHECKPOINT),
                                 monitor='val_loss',
                                 save_weights_only=True,
                                 save_best_only=True,
                                 period=3)
    reduce_lr = ReduceLROnPlateau(monitor='val_loss',
                                  factor=0.1,
                                  patience=3,
                                  verbose=1)
    early_stopping = EarlyStopping(monitor='val_loss',
                                   min_delta=0,
                                   patience=10,
                                   verbose=1)

    lines_train, lines_valid, num_val, num_train = load_training_lines(
        path_dataset, config['valid-split'])

    # Train with frozen layers first, to get a stable loss.
    # Adjust num epochs to your dataset. This step is enough to obtain a not bad model.
    _yolo_loss = lambda y_true, y_pred: y_pred  # use custom yolo_loss Lambda layer.
    _data_gene_bottleneck = partial(
        generator_bottleneck,
        batch_size=config['batch-size']['bottlenecks'],
        input_shape=config['image-size'],
        anchors=anchors,
        nb_classes=nb_classes,
        **config['generator'])
    _data_generator = partial(data_generator,
                              input_shape=config['image-size'],
                              anchors=anchors,
                              nb_classes=nb_classes,
                              **config['generator'])

    epochs_head = config['epochs'].get('head', 0)
    epochs_btnc = config['epochs'].get('bottlenecks', 0)
    if epochs_btnc > 0 or epochs_head > 0:
        # perform bottleneck training
        path_bottlenecks = os.path.join(path_output, NAME_BOTTLENECKS)
        if not os.path.isfile(
                path_bottlenecks) or config['recompute-bottlenecks']:
            logging.info('calculating bottlenecks')
            bottlenecks = bottleneck_model.predict_generator(
                _data_generator(
                    lines_train + lines_valid,
                    randomize=False,
                    batch_size=config['batch-size']['bottlenecks']),
                steps=(len(lines_train + lines_valid) //
                       config['batch-size']['bottlenecks']) + 1,
                max_queue_size=1)
            np.savez(path_bottlenecks,
                     bot0=bottlenecks[0],
                     bot1=bottlenecks[1],
                     bot2=bottlenecks[2])

        # load bottleneck features from file
        dict_bot = np.load(path_bottlenecks)
        bottlenecks_train = [
            dict_bot[bot_][:num_train] for bot_ in ("bot0", "bot1", "bot2")
        ]
        bottlenecks_val = [
            dict_bot[bot_][num_train:] for bot_ in ("bot0", "bot1", "bot2")
        ]

        # train last layers with fixed bottleneck features
        logging.info(
            'Training last layers with bottleneck features '
            'with %i samples, val on %i samples and batch size %i.', num_train,
            num_val, config['batch-size']['bottlenecks'])
        last_layer_model.compile(optimizer='adam',
                                 loss={'yolo_loss': _yolo_loss})
        t_start = time.time()
        last_layer_model.fit_generator(
            _data_gene_bottleneck(lines_train, bottlenecks=bottlenecks_train),
            steps_per_epoch=max(
                1, num_train // config['batch-size']['bottlenecks']),
            validation_data=_data_gene_bottleneck(lines_valid,
                                                  bottlenecks=bottlenecks_val),
            validation_steps=max(
                1, num_val // config['batch-size']['bottlenecks']),
            epochs=epochs_btnc,
            initial_epoch=0,
            max_queue_size=1)
        _export_model(model, path_output, '', '_bottleneck')

        # train last layers with random augmented data
        model.compile(optimizer=Adam(lr=1e-3),
                      loss={'yolo_loss':
                            _yolo_loss})  # use custom yolo_loss Lambda layer.
        logging.info(
            'Train on %i samples, val on %i samples, with batch size %i.',
            num_train, num_val, config['batch-size']['head'])
        t_start = time.time()
        model.fit_generator(
            _data_generator(lines_train,
                            batch_size=config['batch-size']['head']),
            steps_per_epoch=max(1, num_train // config['batch-size']['head']),
            validation_data=_data_generator(
                lines_valid, batch_size=config['batch-size']['head']),
            validation_steps=max(1, num_val // config['batch-size']['head']),
            epochs=epochs_btnc + epochs_head,
            initial_epoch=epochs_btnc,
            callbacks=[log_tb, checkpoint])
        logging.info('Training took %f minutes', (time.time() - t_start) / 60.)
        _export_model(model, path_output, '', '_head')

    # Unfreeze and continue training, to fine-tune.
    # Train longer if the result is not good.
    if config['epochs'].get('full', 0) > 0:
        for i in range(len(model.layers)):
            model.layers[i].trainable = True
        model.compile(optimizer=Adam(lr=1e-4),
                      loss={
                          'yolo_loss': lambda y_true, y_pred: y_pred
                      })  # recompile to apply the change
        logging.info('Unfreeze all of the layers.')

        # note that more GPU memory is required after unfreezing the body
        logging.info(
            'Train on %i samples, val on %i samples, with batch size %i.',
            num_train, num_val, config['batch-size']['full'])
        t_start = time.time()
        model.fit_generator(
            _data_generator(lines_train,
                            batch_size=config['batch-size']['full']),
            steps_per_epoch=max(1, num_train // config['batch-size']['full']),
            validation_data=_data_generator(
                lines_valid, batch_size=config['batch-size']['full']),
            validation_steps=max(1, num_val // config['batch-size']['full']),
            epochs=epochs_btnc + epochs_head + config['epochs']['full'],
            initial_epoch=epochs_btnc + epochs_head,
            callbacks=[log_tb, checkpoint, reduce_lr, early_stopping])
        logging.info('Training took %f minutes', (time.time() - t_start) / 60.)
        _export_model(model, path_output, '', '_full')
예제 #15
0
model = Model(inputs=[y_in, y_err], outputs=h_dec)
model.compile(optimizer=Adam(clipvalue=0.5), loss=chi2(y_err))

# model.load_weights("../../model_weights/model_2020-03-11_20-34-12.h5")

training_time_stamp = datetime.datetime.now(
    tz=pytz.timezone('Europe/London')).strftime("%Y-%m-%d_%H-%M-%S")

CB = EarlyStopping(monitor='val_loss',
                   min_delta=5e-5,
                   patience=100,
                   verbose=1,
                   mode='auto')
MC = ModelCheckpoint(
    '../../model_weights/model_{}.h5'.format(training_time_stamp),
    monitor='val_loss',
    mode="auto",
    save_best_only=True,
    verbose=1)
history = model.fit_generator(training_generator,
                              epochs=8000,
                              verbose=2,
                              callbacks=[MC, CB],
                              validation_data=validation_generator)

np.savetxt("training_history/loss_history-{}.txt".format(training_time_stamp),
           [
               np.asarray(history.history["loss"]),
               np.asarray(history.history["val_loss"])
           ],
           delimiter=",")
예제 #16
0
    def learn(self, symbol_list):
        if self.args.image == "generate":
            for symbol in symbol_list:
                start_time = time.time()
                print("Starting to generate images for: ", symbol)
                GenerateImagesNoHold.generate_buy_sell_images(
                    symbol, str(self.from_date), str(self.to_date))
                end_time = time.time()
                print("Generated images for stocks: ", symbol, " in: ",
                      (end_time - start_time), " seconds")

        training_data = []
        for symbol in symbol_list:
            for category in self.categories:
                path = os.path.join(Constants.IMAGE_DIR,
                                    category.value + "/" + symbol)
                class_num = self.categories.index(category)
                for img in os.listdir(path):
                    try:
                        img_arr = cv2.imread(os.path.join(path, img),
                                             cv2.IMREAD_GRAYSCALE)
                        resized_arr = cv2.resize(
                            img_arr, (self.IMG_SIZE, self.IMG_SIZE))
                        training_data.append([resized_arr, class_num])
                    except Exception as e:
                        print(e)
            random.shuffle(training_data)
            X = []
            y = []
            for features, labels in training_data:
                X.append(features)
                y.append(labels)

            X = np.array(X).reshape(-1, self.IMG_SIZE, self.IMG_SIZE, 1)
            y = np.array(y)

            self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(
                X, y, test_size=.3)

            self.X_train = self.X_train / 255.0

            model = Sequential()
            model.add(Conv2D(128, (3, 3), input_shape=X.shape[1:]))
            model.add(Activation("relu"))
            model.add(MaxPooling2D(pool_size=(2, 2)))

            model.add(Conv2D(128, (3, 3)))
            model.add(Activation("relu"))
            model.add(MaxPooling2D(pool_size=(2, 2)))

            model.add(Conv2D(128, (3, 3)))
            model.add(Activation("relu"))
            model.add(MaxPooling2D(pool_size=(2, 2)))

            model.add(Flatten())
            model.add(Dense(32))
            model.add(Activation("relu"))

            model.add(Dense(1))
            model.add(Activation('sigmoid'))

            model.compile(
                loss="binary_crossentropy",
                optimizer="rmsprop",
                metrics=['accuracy'],
            )
            model_save_path = Constants.MODEL_DIR + symbol + Constants.MODEL_EXTENSION
            model_cp = ModelCheckpoint(model_save_path,
                                       monitor='val_loss',
                                       verbose=0,
                                       save_best_only=True,
                                       save_weights_only=False,
                                       mode='auto',
                                       period=1)

            lr_callback = LearningRateScheduler(self.lr_schedule)
            model.fit(
                self.X_train,
                self.y_train,
                batch_size=16,
                epochs=self.EPOCHS,
                validation_split=0.2,
                callbacks=[self.tensorboard, model_cp, self.early_stopping])

            val_loss, val_acc = model.evaluate(self.X_test, self.y_test)
            print('Accuracy for ', symbol, ": ", val_loss, val_acc)

            model.save(model_save_path)
            accuracy = False
            if accuracy:
                # TENSORBOARD CODE
                train_dataset = tf.data.Dataset.from_tensor_slices(
                    (self.X_train, self.y_train / 1.0))
                test_dataset = tf.data.Dataset.from_tensor_slices(
                    (self.X_test / 255.0, self.y_test / 1.0))

                train_dataset = train_dataset.shuffle(60000).batch(64)
                test_dataset = test_dataset.batch(64)

                current_time = datetime.datetime.now().strftime(
                    "%Y%m%d-%H%M%S")
                train_summary_writer = tf.summary.create_file_writer(
                    'logs/{}'.format(self.NAME) + '/train')
                test_summary_writer = tf.summary.create_file_writer(
                    'logs/{}'.format(self.NAME) + '/test')

                for epoch in range(self.EPOCHS):
                    for (x_train, y_train) in train_dataset:
                        self.train_step(model, self.optimizer, x_train,
                                        y_train)
                    with train_summary_writer.as_default():
                        tf.summary.scalar('loss',
                                          self.train_loss.result(),
                                          step=epoch)
                        tf.summary.scalar('accuracy',
                                          self.train_accuracy.result(),
                                          step=epoch)

                    for (x_test, y_test) in test_dataset:
                        self.test_step(model, x_test, y_test)
                    with test_summary_writer.as_default():
                        tf.summary.scalar('loss',
                                          self.test_loss.result(),
                                          step=epoch)
                        tf.summary.scalar('accuracy',
                                          self.test_accuracy.result(),
                                          step=epoch)

                    template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
                    print(
                        template.format(epoch + 1, self.train_loss.result(),
                                        self.train_accuracy.result() * 100,
                                        self.test_loss.result(),
                                        self.test_accuracy.result() * 100))

                    # Reset metrics every epoch
                    self.train_loss.reset_states()
                    self.test_loss.reset_states()
                    self.train_accuracy.reset_states()
                    self.test_accuracy.reset_states()

            tuning = False
            if tuning:
                with tf.summary.create_file_writer(
                        'logs/hparam_tuning').as_default():
                    hp.hparams_config(
                        hparams=[
                            self.HP_NUM_UNITS, self.HP_DROPOUT,
                            self.HP_OPTIMIZER, self.HP_ACTIVATION
                        ],
                        metrics=[
                            hp.Metric(self.METRIC_ACCURACY,
                                      display_name='Accuracy')
                        ],
                    )

                session_num = 0

                for num_units in self.HP_NUM_UNITS.domain.values:
                    for dropout_rate in (self.HP_DROPOUT.domain.min_value,
                                         self.HP_DROPOUT.domain.max_value):
                        for optimizer in self.HP_OPTIMIZER.domain.values:
                            for activation in self.HP_ACTIVATION.domain.values:
                                hparams = {
                                    self.HP_NUM_UNITS: num_units,
                                    self.HP_DROPOUT: dropout_rate,
                                    self.HP_OPTIMIZER: optimizer,
                                    self.HP_ACTIVATION: activation
                                }
                                run_name = "run-%d" % session_num
                                print('--- Starting trial: %s' % run_name)
                                print({h.name: hparams[h] for h in hparams})
                                self.run('logs/hparam_tuning/' + run_name,
                                         hparams)
                                session_num += 1
def run_model(data):
  #final_mse = np.empty((len(split)))
  final_rmse = []
  for temp_split in split:
    x_data = data.values
    y_data = df_targets.values.reshape(-1,1)

    num_data = len(x_data)
    train_split = temp_split
    num_train = int(train_split * num_data)
    num_test = num_data - num_train

    x_train = x_data[0:num_train]
    x_test = x_data[num_train:]
    y_train = y_data[0:num_train]
    y_test = y_data[num_train:]

    num_x_signals = x_data.shape[1]
    num_y_signals = y_data.shape[1]

    x_scaler = MinMaxScaler()
    x_train_scaled = x_scaler.fit_transform(x_train)
    x_test_scaled = x_scaler.transform(x_test)

    y_scaler = MinMaxScaler()
    y_train_scaled = y_scaler.fit_transform(y_train)
    y_test_scaled = y_scaler.transform(y_test)

    batch_size = 256
    sequence_length = 100

    generator = batch_generator(batch_size, sequence_length, num_x_signals, num_y_signals, num_train, x_train_scaled, y_train_scaled)

    validation_data = (np.expand_dims(x_test_scaled, axis=0), np.expand_dims(y_test_scaled, axis=0))

    model = Sequential()
    model.add(GRU(units=512,
                  return_sequences=True,
                  input_shape=(None, num_x_signals,)))
    model.add(Dense(num_y_signals, activation='sigmoid'))

    if False:
        from tensorflow.python.keras.initializers import RandomUniform

        # Maybe use lower init-ranges.
        init = RandomUniform(minval=-0.05, maxval=0.05)

        model.add(Dense(num_y_signals,
                      activation='linear',
                        kernel_initializer=init))

    optimizer = RMSprop(lr=1e-3)
    model.compile(loss=loss_mse_warmup, optimizer=optimizer, metrics = ['mse'])

    path_checkpoint = 'best_model'
    callback_checkpoint = ModelCheckpoint(filepath=path_checkpoint, monitor='val_loss', verbose=1, save_weights_only=True, save_best_only=True)
    callback_early_stopping = EarlyStopping(monitor='val_loss', patience=3, verbose=1)
    callbacks = [callback_checkpoint, callback_early_stopping]

    model.fit(x=generator,
              epochs=1,
              steps_per_epoch=100,
              validation_data=validation_data, 
              callbacks = callbacks)
    try:
      model.load_weights(path_checkpoint)
      print('Success')
    except Exception as error:
      print("Error trying to load checkpoint.")
      print(error)

    # Input-signals for the model.
    x = np.expand_dims(x_test_scaled, axis=0)

    # Use the model to predict the output-signals.
    y_pred = model.predict(x)
    y_pred_rescaled = y_scaler.inverse_transform(y_pred[0])

    out_rmse = np.sqrt(mean_squared_error(y_test,y_pred_rescaled))
    
    print(out_rmse)
    #final_mse = np.append(final_mse, out_mse)
    final_rmse.append(out_rmse)

  return_final_rmse = np.array(final_rmse)



  return return_final_rmse
    def start(self):
        """ Loading training data """
        print("\n-------------- Available training data --------------")
        trainCaptions, trainFeatures = self.utils.dataLoader(
            configuration['trainImagePath'])
        """ Loading validation data """
        print("------------- Available validation data -------------")
        valCaptions, valFeatures = self.utils.dataLoader(
            configuration['validationImagePath'])
        """ Generating tokens for training data and largest caption length"""
        print("\n----------------------------------------------------")
        maxCaption = self.utils.maxLengthOfCaption(trainCaptions)
        print("Length of largest caption of training: ", maxCaption)
        if not os.path.exists(configuration['featuresPath'] + 'tokenizer.pkl'):
            self.utils.createTokenizer(trainCaptions)
            print("Tokenizer file generated")
        else:
            print('Tokenizer file already present at %s' %
                  (configuration['featuresPath'] + 'tokenizer.pkl'))
        tokenizer = load(
            open(configuration['featuresPath'] + 'tokenizer.pkl', 'rb'))
        vocabSize = len(tokenizer.word_index) + 1
        print('Training vocabulary Size: %d' % vocabSize)

        print("\n----------------------------------------------------")
        stepsToTrain = round(len(trainFeatures) / configuration['batchSize'])
        stepsToVal = round(len(valFeatures) / configuration['batchSize'])
        print("Batch size: %d" % configuration['batchSize'])
        print("epochs: %d" % configuration['epochs'])
        print("Steps per epoch for training: %d" % stepsToTrain)
        print("Steps per epoch for validation: %d\n" % stepsToVal)

        model = self.utils.captionModel(vocabSize, maxCaption,
                                        configuration['CNNmodelType'],
                                        configuration['RNNmodelType'])
        print(model.summary())

        "To plot a model Image"
        # plot_model(model, "caption_model.png", show_shapes=True) # works on colab only
        "The modified caption model"
        # model = self.utils.updatedCaptionModel(vocabSize, maxCaption, configuration['CNNmodelType'], configuration['RNNmodelType'])
        # print('\nRNN Model Summary : ')

        modelSavePath = configuration['modelsPath'] + "model_" + str(
            configuration['CNNmodelType']
        ) + "_" + str(
            configuration['RNNmodelType']
        ) + "_epoch-{epoch:02d}_train_loss-{loss:.4f}_val_loss-{val_loss:.4f}.hdf5"
        checkpoint = ModelCheckpoint(modelSavePath,
                                     monitor='val_loss',
                                     verbose=1,
                                     save_best_only=True,
                                     mode='min')
        # logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
        # tensorboardCallback = TensorBoard(log_dir=logdir, histogram_freq=1)
        # callbacks = [checkpoint, tensorboardCallback]
        callbacks = [checkpoint]

        if configuration['batchSize'] <= len(trainCaptions.keys()):
            trainingDataGen = self.utils.dataGenerator(
                trainFeatures, trainCaptions, tokenizer, maxCaption,
                configuration['batchSize'])
            validationDataGen = self.utils.dataGenerator(
                valFeatures, valCaptions, tokenizer, maxCaption,
                configuration['batchSize'])
            """ Use to train the saved model """
            # model_path(configuration['CNNmodelType'])
            # print(configuration['loadModelPath'])
            # model = load_model(configuration['loadModelPath'])
            """ Training the model """
            history = model.fit(trainingDataGen,
                                epochs=configuration['epochs'],
                                steps_per_epoch=stepsToTrain,
                                validation_data=validationDataGen,
                                validation_steps=stepsToVal,
                                callbacks=callbacks,
                                verbose=1)
            print("Model trained successfully.")

            # list all data in history
            print(history.history)
            fName = configuration['modelsPath'] + "history/" + configuration[
                'CNNmodelType'] + "_" + configuration[
                    'RNNmodelType'] + "_" + 'model_history.txt'
            file = open(fName, 'w')
            file.write(str(history.history) + '\n')
            file.close()
            # summarize history for loss
            plt.plot(history.history['loss'])
            plt.plot(history.history['val_loss'])
            plt.title('model loss')
            plt.ylabel('loss')
            plt.xlabel('epoch')
            plt.legend(['train', 'validation'], loc='upper left')
            plt.show()

            # summarize history for accuracy
            plt.plot(history.history['accuracy'])
            plt.plot(history.history['val_accuracy'])
            plt.title('model accuracy')
            plt.ylabel('accuracy')
            plt.xlabel('epoch')
            plt.legend(['train', 'validation'], loc='upper left')
            plt.show()

        else:
            print("Batch size must be less than or equal to " +
                  list(trainCaptions.keys()))
예제 #19
0
"""### GRU 모델로 학습하기"""

from tensorflow.keras.layers import Embedding, Dense, GRU
from tensorflow.keras.models import Sequential
from tensorflow.keras.models import load_model
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

model = Sequential()

model.add(Embedding(vocab_size, 100))
model.add(GRU(128))
model.add(Dense(1, activation='sigmoid')) # 다중분류가 아니니 softmax X

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=4)
mc = ModelCheckpoint('best_model.h5', monitor='val_acc', mode='max', verbose=1, save_best_only=True)

# compile
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
history = model.fit(x_train, y_train, epochs= 30, callbacks=[es, mc], batch_size = 60, validation_split=0.2)

loaded_model = load_model('best_model.h5')
print('\n 테스트 정확도 : %.4f'% (loaded_model.evaluate(x_test, y_test)[1]))

"""## 리뷰 예측하기"""

def sentiment_predict(new_sentence):
  new_sentence = mecab.morphs(new_sentence) #토큰화
  new_sentence = [word for word in new_sentence if not word in stopwords] #불용어 제거
  encoded = tokenizer.texts_to_sequences([new_sentence])
  pad_new = pad_sequences(encoded, maxlen=max_len) # 패딩
예제 #20
0
r_layer = Concatenate()(conv_feature_maps)
r_layer = Dropout(rate=0.5)(r_layer)
y_output = Dense(250, activation='relu')(r_layer)
y_output = Dense(1, activation='sigmoid')(r_layer)

model = Model(x_input, y_output)
model.compile(loss='binary_crossentropy',
              optimizer=Adam(learning_rate=0.0005),
              metrics=['accuracy'])
model.summary()

# 학습
es = EarlyStopping(monitor='val_accuracy', min_delta=0.0001, patience=2)
cp = ModelCheckpoint(filepath='./',
                     monitor='val_accuracy',
                     verbose=1,
                     save_best_only=True,
                     save_weights_only=True)
hist = model.fit(x_train,
                 y_train,
                 validation_data=(x_val, y_val),
                 batch_size=512,
                 epochs=30,
                 callbacks=[es, cp])

# Loss history를 그린다
plt.plot(hist.history['loss'], label='Train loss')
plt.plot(hist.history['val_loss'], label='Test loss')
plt.legend()
plt.title("Loss history")
plt.xlabel("epoch")
예제 #21
0
def training(path_save_spectrogram, weights_path, name_model,
             training_from_scratch, epochs, batch_size):
    """ This function will read noisy voice and clean voice spectrograms created by data_creation mode,
    and train a Unet model on this dataset for epochs and batch_size specified. It saves best models to disk regularly
    If training_from_scratch is set to True it will train from scratch, if set to False, it will train
    from weights (name_model) provided in weights_path
    """
    #load noisy voice & clean voice spectrograms created by data_creation mode
    X_in = np.load(path_save_spectrogram + 'noisy_voice_amp_db' + ".npy")
    X_ou = np.load(path_save_spectrogram + 'voice_amp_db' + ".npy")
    #Model of noise to predict
    X_ou = X_in - X_ou

    #Check distribution
    print(stats.describe(X_in.reshape(-1, 1)))
    print(stats.describe(X_ou.reshape(-1, 1)))

    #to scale between -1 and 1
    X_in = scaled_in(X_in)
    X_ou = scaled_ou(X_ou)

    #Check shape of spectrograms
    print(X_in.shape)
    print(X_ou.shape)
    #Check new distribution
    print(stats.describe(X_in.reshape(-1, 1)))
    print(stats.describe(X_ou.reshape(-1, 1)))

    #Reshape for training
    X_in = X_in[:, :, :]
    X_in = X_in.reshape(X_in.shape[0], X_in.shape[1], X_in.shape[2], 1)
    X_ou = X_ou[:, :, :]
    X_ou = X_ou.reshape(X_ou.shape[0], X_ou.shape[1], X_ou.shape[2], 1)

    X_train, X_test, y_train, y_test = train_test_split(X_in,
                                                        X_ou,
                                                        test_size=0.10,
                                                        random_state=42)

    #If training from scratch
    if training_from_scratch:

        generator_nn = unet()
    #If training from pre-trained weights
    else:

        generator_nn = unet(pretrained_weights=weights_path + name_model +
                            '.h5')

    #Save best models to disk during training
    checkpoint = ModelCheckpoint(weights_path + '/model_best.h5',
                                 verbose=1,
                                 monitor='val_loss',
                                 save_best_only=True,
                                 mode='auto')

    generator_nn.summary()
    #Training
    history = generator_nn.fit(X_train,
                               y_train,
                               epochs=epochs,
                               batch_size=batch_size,
                               shuffle=True,
                               callbacks=[checkpoint],
                               verbose=1,
                               validation_data=(X_test, y_test))

    #Plot training and validation loss (log scale)
    loss = history.history['loss']
    val_loss = history.history['val_loss']
    epochs = range(1, len(loss) + 1)

    plt.plot(epochs, loss, label='Training loss')
    plt.plot(epochs, val_loss, label='Validation loss')
    plt.yscale('log')
    plt.title('Training and validation loss')
    plt.legend()
    plt.show()
예제 #22
0
model.add(Dense(1))

model.summary()

model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate,
                                                 beta_1=beta1,
                                                 beta_2=beta2,
                                                 epsilon=epsilon,
                                                 decay=weight_decay),
              loss=brLoss(batch_size),
              metrics=[evalLoss, Pearson, Spearman, Kendall])

csv_logger = CSVLogger("model_history_log.csv", append=True)
checkpoint = ModelCheckpoint("model.hdf5",
                             monitor='val_loss',
                             verbose=1,
                             save_best_only=False,
                             mode='min')

model.fit(x_train,
          y_train,
          epochs=epochs,
          batch_size=batch_size,
          validation_data=(x_val, y_val),
          callbacks=[csv_logger, checkpoint])

test = np.random.random((1, 20, 20, 20, 12))
prediction = model.predict(test)
print(prediction)
'''
ORIGINAL UNCAHNGED MODEL. DON'T DELETE
예제 #23
0
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer=hp.Choice('optimizer', ['adam', 'sgd', 'rmsprop']),
                  metrics=['accuracy'])
    return model


#%%
### Callback functions
ckpt_dir = 'logs/ktuner/checkpoints/' + datetime.now().strftime(
    '%Y%m%d-%H%M%S')
os.mkdir(ckpt_dir)
path_checkpoint = ckpt_dir + datetime.now().strftime('%Y%m%d-%H%M%S') + '.ckpt'

callback_checkpoint = ModelCheckpoint(filepath=path_checkpoint,
                                      monitor='val_loss',
                                      verbose=1,
                                      save_weights_only=True,
                                      save_best_only=True)

callback_early_stopping = EarlyStopping(monitor='val_loss',
                                        patience=15,
                                        verbose=1)

log_dir = 'logs/ktuner/fit/' + datetime.now().strftime('%Y%m%d-%H%M%S')

callback_tensorboard = TensorBoard(log_dir=log_dir,
                                   histogram_freq=1,
                                   write_graph=False)

callback_reduce_lr = ReduceLROnPlateau(monitor='val_loss',
                                       factor=0.1,
예제 #24
0
model.summary()

model.save('C:/nmb/nmb_data/h5/5s/0601/DNN_lstm_2.h5')

# 컴파일, 훈련
op = Adadelta(lr=1e-2)
batch_size = 32

es = EarlyStopping(monitor='val_loss',
                   patience=20,
                   restore_best_weights=True,
                   verbose=1)
lr = ReduceLROnPlateau(monitor='val_loss', vactor=0.5, patience=10, verbose=1)
path = 'C:/nmb/nmb_data/h5/5s/0601/DNN_lstm_2.h5'
mc = ModelCheckpoint(path, monitor='val_loss', verbose=1, save_best_only=True)

model.compile(optimizer=op,
              loss="sparse_categorical_crossentropy",
              metrics=['acc'])
history = model.fit(x_train,
                    y_train,
                    epochs=5000,
                    batch_size=batch_size,
                    validation_split=0.2,
                    callbacks=[es, lr, mc])

# 평가, 예측
# model = load_model('C:/nmb/nmb_data/h5/5s/0601/DNN_lstm_2.h5')
model.load_weights('C:/nmb/nmb_data/h5/5s/0601/DNN_lstm_2.h5')
result = model.evaluate(x_test, y_test, batch_size=32)
예제 #25
0
파일: model.py 프로젝트: luiz5040/Luiz-
def train_data(iq, symbol, symbols, timeframe):

    df = iq_get_data(iq, symbol, symbols, timeframe)

    # df.to_csv(r'EURUSD.csv')
    df = Indicators(df)

    df.isnull().sum().sum()  # there are no nans
    df.fillna(method="ffill", inplace=True)
    df = df.loc[~df.index.duplicated(keep='first')]
    df['future'] = df["GOAL"].shift(-predict_period)

    #df = df.drop(columns = {'open','min','max'})

    df = df.dropna()
    dataset = df.fillna(method="ffill")
    dataset = dataset.dropna()

    dataset.sort_index(inplace=True)

    main_df = dataset

    main_df.fillna(method="ffill", inplace=True)
    main_df.dropna(inplace=True)

    main_df['target'] = list(map(classify, main_df['GOAL'], main_df['future']))

    main_df.dropna(inplace=True)

    main_df['target'].value_counts()

    main_df.dropna(inplace=True)

    main_df = main_df.astype('float32')
    if VALIDATION_TRAIN:
        times = sorted(main_df.index.values)
        last_5pct = sorted(main_df.index.values)[-int(0.1 * len(times))]

        validation_main_df = main_df[(main_df.index >= last_5pct)]
        main_df = main_df[(main_df.index < last_5pct)]

        train_x, train_y = preprocess_df(main_df)
        validation_x, validation_y = preprocess_df(validation_main_df)

        print(f"train data: {len(train_x)} validation: {len(validation_x)}")
        print(f"sells: {train_y.count(0)}, buys: {train_y.count(1)}")
        print(
            f"VALIDATION sells: {validation_y.count(0)}, buys : {validation_y.count(1)}"
        )

        train_y = np.asarray(train_y)
        validation_y = np.asarray(validation_y)
    else:
        train_x, train_y = preprocess_df(main_df)
        print(f"train data: {len(train_x)}")
        print(f"sells: {train_y.count(0)}, buys: {train_y.count(1)}")
        train_y = np.asarray(train_y)

    NAME = f"{LEARNING_RATE}-{seq_len}-SEQ-{predict_period}-{EPOCHS}-{BATCH_SIZE}-PRED-{int(time.time())}"

    earlyStoppingCallback = tf.keras.callbacks.EarlyStopping(
        monitor='loss', patience=EARLYSTOP)
    model = Sequential()
    model.add(
        LSTM(NEURONS, input_shape=(train_x.shape[1:]), return_sequences=True))
    model.add(Dropout(0.1))
    model.add(BatchNormalization())

    model.add(LSTM(NEURONS, return_sequences=True))
    model.add(Dropout(0.1))
    model.add(BatchNormalization())

    model.add(LSTM(NEURONS))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(Dense(NEURONS, activation='relu'))
    model.add(Dropout(0.2))

    model.add(Dense(2, activation='softmax'))

    opt = tf.keras.optimizers.Adam(lr=LEARNING_RATE)

    # Compile model
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer=opt,
                  metrics=['accuracy'])

    tensorboard = TensorBoard(log_dir="logs/{}".format(NAME))

    filepath = "ThesisBrain"
    if VALIDATION_TRAIN:
        checkpoint = ModelCheckpoint("models/{}.h5".format(filepath),
                                     monitor='val_accuracy',
                                     verbose=1,
                                     save_best_only=True,
                                     save_weights_only=False,
                                     mode='max')
        # Train model
        model.fit(
            train_x,
            train_y,
            batch_size=BATCH_SIZE,
            epochs=EPOCHS,
            validation_data=(validation_x, validation_y),
            callbacks=[tensorboard, checkpoint, earlyStoppingCallback],
        )
    else:
        checkpoint = ModelCheckpoint("models/{}.h5".format(filepath),
                                     monitor='accuracy',
                                     verbose=1,
                                     save_best_only=True,
                                     save_weights_only=False,
                                     mode='max')
        # Train model
        model.fit(
            train_x,
            train_y,
            batch_size=BATCH_SIZE,
            epochs=EPOCHS,
            callbacks=[tensorboard, checkpoint, earlyStoppingCallback],
        )

    return filepath