Exemple #1
0
def graph_conv_training():
    graph_featurizer = dc.feat.graph_features.ConvMolFeaturizer()

    loader = dc.data.data_loader.CSVLoader(tasks=[t_task.get()],
                                           smiles_field=t_smiles.get(),
                                           id_field=t_id.get(),
                                           featurizer=graph_featurizer)
    dataset = loader.featurize(t_csv.get())

    splitter = dc.splits.splitters.RandomSplitter()
    trainset, testset = splitter.train_test_split(dataset)

    hp = dc.molnet.preset_hyper_parameters
    param = hp.hps['graphconvreg']
    print(param)

    batch_size = 48

    from deepchem.models.tensorgraph.models.graph_models import GraphConvModel
    model = GraphConvModel(n_tasks=1,
                           batch_size=64,
                           uncertainty=False,
                           mode='regression')

    model = dc.models.GraphConvTensorGraph(1,
                                           batch_size=batch_size,
                                           learning_rate=1e-3,
                                           use_queue=False,
                                           mode='regression',
                                           model_dir=t_savename.get())

    np.random.seed(1)
    random.seed(1)

    model.fit(dataset, nb_epoch=max(1, int(t_epochs.get())))
    #model.fit(trainset, nb_epoch=max(1, int(t_epochs.get())))

    metric = dc.metrics.Metric(dc.metrics.r2_score)

    print('epoch: ', t_epochs.get())
    print("Evaluating model")
    train_score = model.evaluate(trainset, [metric])
    test_score = model.evaluate(testset, [metric])

    model.save()

    pred_train = model.predict(trainset)
    pred_test = model.predict(testset)

    y_train = np.array(trainset.y, dtype=np.float32)
    y_test = np.array(testset.y, dtype=np.float32)

    import matplotlib.pyplot as plt

    plt.figure()

    plt.figure(figsize=(5, 5))

    plt.scatter(y_train, pred_train, label='Train', c='blue')
    plt.title('Graph Convolution')
    plt.xlabel('Measured value')
    plt.ylabel('Predicted value')
    plt.scatter(y_test, pred_test, c='lightgreen', label='Test', alpha=0.8)
    plt.legend(loc=4)
    #plt.show()
    plt.savefig('score-tmp.png')

    from PIL import Image
    img = Image.open('score-tmp.png')

    img_resize = img.resize((400, 400), Image.LANCZOS)
    img_resize.save('score-tmp.png')

    global image_score
    image_score_open = Image.open('score-tmp.png')
    image_score = ImageTk.PhotoImage(image_score_open, master=frame1)

    canvas.create_image(200, 200, image=image_score)

    #Calculate R2 score
    print("Train score")
    print(train_score)
    t_train_r2.set(train_score)

    print("Test scores")
    print(test_score)
    t_test_r2.set(test_score)

    #Calculate RMSE
    train_rmse = 1
    test_rmse = 1
    '''
    print("Train RMSE")
    print(train_rmse)
    t_train_rmse.set(train_rmse)

    print("Test RMSE")
    print(test_rmse)
    t_test_rmse.set(test_rmse)
    '''

    df_save = pd.DataFrame({'pred_train': pred_train, 'meas_train': y_train})

    df_save.to_csv('pred_and_meas_train.csv')

    print('finish!')
tf.set_random_seed(123)
import deepchem as dc
from deepchem.molnet import load_tox21
from deepchem.models.tensorgraph.models.graph_models import GraphConvModel

model_dir = "model"

# Load Tox21 dataset
tox21_tasks, tox21_datasets, transformers = load_tox21(featurizer='GraphConv')
with open('tasks.json', 'w') as fp:
    json.dump(tox21_tasks, fp)
train_dataset, valid_dataset, test_dataset = tox21_datasets

# Fit models
metric = dc.metrics.Metric(dc.metrics.roc_auc_score,
                           np.mean,
                           mode="classification")

# Batch size of models
batch_size = 50

model = GraphConvModel(len(tox21_tasks),
                       batch_size=batch_size,
                       mode='classification',
                       model_dir=model_dir)

model.fit(train_dataset, nb_epoch=50)

model.save()