Example #1
0
data1 = np.load('./data/PTCDA_CO.npz')
X1 = data1['data']
afm_dim1 = (data1['lengthX'], data1['lengthY'])

data2 = np.load('./data/PTCDA_Xe.npz')
X2 = data2['data']
afm_dim2 = (data2['lengthX'], data2['lengthY'])

assert afm_dim1 == afm_dim2
afm_dim = afm_dim1
X_exp = apply_preprocessing_exp([X1[None], X2[None]], afm_dim)

# Load model for sim
input_shape = afmulator.scan_dim[:2] + (10, )
model_sim = ESUNet(n_in=2,
                   n_out=2,
                   input_shape=input_shape,
                   last_relu=[False, True])
load_pretrained_weights(model_sim, tip_type='CO-Xe')

# Load model for exp (need two models because of different input sizes)
input_shape = X_exp[0].shape[1:]
model_exp = ESUNet(n_in=2,
                   n_out=2,
                   input_shape=input_shape,
                   last_relu=[False, True])
load_pretrained_weights(model_exp, tip_type='CO-Xe')

# Get predictions
pred_sim = model_sim.predict(X_sim)
pred_exp = model_exp.predict(X_exp)
Example #2
0
# Define generator for Xe-Cl
trainer_Xe_Cl = Trainer(
    afmulator,
    aux_maps,
    molecules,
    batch_size=1,
    distAbove=5.2,
    iZPPs=[54, 17],  # Xe, Cl
    Qs=[[30, -60, 30, 0], [-0.3, 0, 0, 0]],
    QZs=[[0.1, 0, -0.1, 0], [0, 0, 0, 0]])

# Load model for Cl-CO
input_shape = afmulator.scan_dim[:2] + (afmulator.scan_dim[2] -
                                        afmulator.df_steps, )
model_Cl_CO = ESUNet(n_in=2,
                     n_out=2,
                     input_shape=input_shape,
                     last_relu=[False, True])
load_pretrained_weights(model_Cl_CO, tip_type='Cl-CO')

# Load model for Xe-Cl
input_shape = afmulator.scan_dim[:2] + (afmulator.scan_dim[2] -
                                        afmulator.df_steps, )
model_Xe_Cl = ESUNet(n_in=2,
                     n_out=2,
                     input_shape=input_shape,
                     last_relu=[False, False])
load_pretrained_weights(model_Xe_Cl, tip_type='Xe-Cl')

# Loop over molecules and plot
width_ratios = [6, 12]
fig = plt.figure(figsize=(sum(width_ratios), 6 * len(molecules)))
Example #3
0
model_dir         = './model'                                       # Directory where all output files are saved to
pred_dir          = os.path.join(model_dir, 'predictions/')         # Where to save predictions
checkpoint_dir    = os.path.join(model_dir, 'checkpoints/')         # Where to save model checkpoints
log_path          = os.path.join(model_dir, 'training.log')         # Where to save loss history during training
history_plot_path = os.path.join(model_dir, 'loss_history.png')     # Where to plot loss history during training
optimizer_path    = os.path.join(model_dir, 'optimizer_state.npz')  # Where to save optimizer state
descriptors       = ['ES', 'Height_Map']                            # Labels for outputting information

# Create output folder
if not os.path.exists(model_dir):
    os.makedirs(model_dir)
if not os.path.exists(checkpoint_dir):
    os.makedirs(checkpoint_dir)

# Define model
model = ESUNet(n_in=2, n_out=2, input_shape=input_shape, last_relu=[False, True], labels=descriptors) # CO-Xe, Cl-CO
# model = ESUNet(n_in=2, n_out=2, input_shape=input_shape, last_relu=[False, False], labels=descriptors) # Cl-Xe
# model = ESUNet(n_in=1, n_out=2, input_shape=input_shape, last_relu=[False, True], labels=descriptors) # CO
optimizer = optimizers.Adam(lr=0.001, decay=1e-5)
model.compile(optimizer, 'mse', loss_weights=loss_weights)
model.summary()
    
# Setup data loading
train_loader = Loader(os.path.join(data_dir, 'train/'))
val_loader   = Loader(os.path.join(data_dir, 'val/'))
test_loader  = Loader(os.path.join(data_dir, 'test/'))

# Setup callbacks
checkpointer = ModelCheckpoint(os.path.join(checkpoint_dir, 'weights_{epoch:d}.h5'), save_weights_only=True)
logger = CSVLogger(log_path, append=True)
plotter = HistoryPlotter(log_path, history_plot_path, descriptors)
Example #4
0
data_bcb = np.load('./data/BCB_CO.npz')
X_bcb = data_bcb['data']
afm_dim_bcb = (data_bcb['lengthX'], data_bcb['lengthY'])
X_bcb = apply_preprocessing_bcb([X_bcb[None]], afm_dim_bcb)

# Load PTCDA data and preprocess
data_ptcda = np.load('./data/PTCDA_CO.npz')
X_ptcda = data_ptcda['data']
afm_dim_ptcda = (data_ptcda['lengthX'], data_ptcda['lengthY'])
X_ptcda = apply_preprocessing_ptcda([X_ptcda[None]], afm_dim_ptcda)

# Load model for simulations
input_shape = afmulator.scan_dim[:2] + (afmulator.scan_dim[2] -
                                        afmulator.df_steps, )
model_sim = ESUNet(n_in=1,
                   n_out=2,
                   input_shape=input_shape,
                   last_relu=[False, True])
load_pretrained_weights(model_sim, tip_type='CO')

# Load model for BCB
model_bcb = ESUNet(n_in=1,
                   n_out=2,
                   input_shape=X_bcb[0].shape[1:],
                   last_relu=[False, True])
load_pretrained_weights(model_bcb, tip_type='CO')

# Load model for PTCDA
model_ptcda = ESUNet(n_in=1,
                     n_out=2,
                     input_shape=X_ptcda[0].shape[1:],
                     last_relu=[False, True])
Example #5
0
# Define AFMulator
afmulator = AFMulator(**afmulator_args)
afmulator.npbc = (0, 0, 0)

# Define AuxMaps
scan_window = [afmulator.scan_window[0][:2], afmulator.scan_window[1][:2]]
aux_maps = [aux.ESMap(scanner=afmulator.scanner, zmin=-2.0, iso=0.1)]

# Define generator
trainer = InverseAFMtrainer(afmulator, aux_maps, molecules, **generator_kwargs)

# Load model
input_shape = afmulator.scan_dim[:2] + (afmulator.scan_dim[2] -
                                        afmulator.df_steps, )
model = ESUNet(n_in=2,
               n_out=2,
               input_shape=input_shape,
               last_relu=[False, True])
load_pretrained_weights(model, tip_type='CO-Xe')

# Loop over molecules and plot
width_ratios = [3, 6, 8]
fig = plt.figure(figsize=(sum(width_ratios), 4.05 * len(molecules)))
fig_grid = fig.add_gridspec(len(molecules), 1, wspace=0, hspace=0.03)
for ib, batch in enumerate(trainer):

    # Get batch and predict
    X, Y, xyzs = apply_preprocessing(batch)
    pred = model.predict(X)

    # Create plot grid
    sample_grid = fig_grid[ib, 0].subgridspec(1,