1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import sys
- import os
- sys.path.append(os.path.abspath("../../.."))
- os.environ['KERAS_BACKEND'] = 'tensorflow'
- import keras
- from BiddingKG.dl.table_head.metrics import precision, recall, f1
- from keras import optimizers, Model
- from BiddingKG.dl.table_head.models.model import get_model
- from BiddingKG.dl.table_head.loss import focal_loss
- from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
- from BiddingKG.dl.table_head.pre_process import get_data_from_file, get_data_from_sql, my_data_loader
- import numpy as np
- from keras import backend as K
- input_shape = (3, 10, 60)
- output_shape = (3,)
- batch_size = 1024
- epochs = 1000
- pretrained_path = "checkpoints/best.hdf5"
- checkpoint_path = "checkpoints/"
- PRETRAINED = False
- CHECKPOINT = False
- def train():
- # GPU available
- print("gpus", K.tensorflow_backend._get_available_gpus())
- # Data
- data_x, data_y = get_data_from_file('txt')
- print("finish read data", len(data_x))
- # Split -> Train, Test
- split_size = int(len(data_x)*0.1)
- test_x, test_y = data_x[:split_size], data_y[:split_size]
- train_x, train_y = data_x[split_size:], data_y[split_size:]
- # Data Loader
- train_data_loader = my_data_loader(train_x, train_y, batch_size=batch_size)
- test_data_loader = my_data_loader(test_x, test_y, batch_size=batch_size)
- # Model
- model = get_model(input_shape, output_shape)
- if PRETRAINED:
- model.load_weights(pretrained_path)
- print("read pretrained model", pretrained_path)
- else:
- print("no pretrained")
- if CHECKPOINT:
- model.load_weights(checkpoint_path)
- print("read checkpoint model", checkpoint_path)
- else:
- print("no checkpoint")
- filepath = 'e-{epoch:02d}-loss-{val_loss:.2f}'
- checkpoint = ModelCheckpoint(checkpoint_path+filepath+".hdf5", monitor='val_f1',
- verbose=1, save_best_only=True, mode='max')
- model.compile(optimizer=optimizers.Adam(lr=0.0005), loss='binary_crossentropy',
- metrics=['binary_crossentropy', 'acc',
- precision, recall, f1])
- rlu = ReduceLROnPlateau(monitor='val_f1', factor=0.1, patience=5,
- verbose=1, mode='max', cooldown=0, min_lr=0)
- model.fit_generator(train_data_loader,
- steps_per_epoch=max(1, len(train_x) // batch_size),
- callbacks=[checkpoint, rlu],
- validation_data=test_data_loader,
- validation_steps=max(1, len(test_x) // batch_size),
- epochs=epochs)
- # model.fit(x=[train_x[0], train_x[1], train_x[2]], y=train_y,
- # validation_data=([test_x[0], test_x[1], test_x[2]], test_y),
- # epochs=epochs, batch_size=256, shuffle=True,
- # callbacks=[checkpoint, rlu])
- return model, test_x
- def print_layer_output(model, data):
- middle_layer = Model(inputs=model.inputs,
- outputs=model.get_layer('input_2').output)
- middle_layer_output = middle_layer.predict([data[0], data[1]])
- print(middle_layer_output)
- return
- if __name__ == '__main__':
- model, data = train()
|