Exemplo n.º 1
0
    def __init__(self,
                 model_parameters=ModelParameters(),
                 gpus=[]):
        """
        This is the constructor for the class.

        @params:
        model_parameters (ModelParameters)   : A ModelParameter object
        gpus (list): A list of GPUs not to use for computation
        wavefuns (list)L A list of wave function generator to source generation

        @returns:
        """

        self.pars = model_parameters
        self.F = SeisCL()

        # Overload to generate other kind of models
        self.model_generator = ModelGenerator(model_parameters=model_parameters)

        self.init_F(gpus)
        self.image_size = [int(np.ceil(self.pars.NT/self.pars.resampling)),
                           self.F.rec_pos.shape[1]]

        allwavefuns= [lambda f0, t, o: gaussian(f0, t, o, order=1),
                      lambda f0, t, o: gaussian(f0, t, o, order=2),
                      lambda f0, t, o: gaussian(f0, t, o, order=3),
                      lambda f0, t, o: morlet(f0, t, o, order=2),
                      lambda f0, t, o: morlet(f0, t, o, order=3),
                      lambda f0, t, o: morlet(f0, t, o, order=4)]


        self.wavefuns = [allwavefuns[ii] for ii in model_parameters.wavefuns]

        self.files_list = {}
Exemplo n.º 2
0
    def __init__(self, model_parameters=ModelParameters()):
        """
        This is the constructor for the class.

        @params:
        model_parameters (ModelParameters)   : A ModelParameter object

        @returns:
        """
        self.pars = model_parameters
        self.vp = None
Exemplo n.º 3
0
        print("\nUsage error.\n")
        parser.print_help()

    if args.niter < 0:
        print_usage_error_message()
        exit()

    if args.nlayers <= -1:
        print_usage_error_message()
        exit()

    if args.nbatch <= 0:
        print_usage_error_message()
        exit()

    parameters = ModelParameters()
    parameters.read_parameters_from_disk(args.fileparam)
    parameters.device_type = args.device
    parameters.num_layers = args.nlayers
    #parameters.read_parameters_from_disk(filename='dataset_3/dhmin40_layer_num_min5/model_parameters.hdf5')
    gen = SeismicGenerator(parameters)

    parameters.mute_nearoffset = False
    parameters.random_static = False
    parameters.random_noise = False
    data, vrms, vint, valid, tlabels = gen.read_example(".",
                                                        filename=args.filename)

    #    data = mute_direct(data, 1500, parameters)
    #    #data = random_static(data, 2)
    ##    data = random_noise(data, 0.01)
Exemplo n.º 4
0
def Case_small():
    return ModelParameters()
Exemplo n.º 5
0
def Case_article(noise=0):
    pars = ModelParameters()
    pars.layer_dh_min = 5
    pars.layer_num_min = 48

    pars.dh = 6.25
    pars.peak_freq = 26
    pars.df = 5
    pars.wavefuns = [0, 1]
    pars.NX = 692 * 2
    pars.NZ = 752 * 2
    pars.dt = 0.0004
    pars.NT = int(8.0 / pars.dt)
    pars.resampling = 10

    pars.dg = 8
    pars.gmin = int(470 / pars.dh)
    pars.gmax = int((470 + 72 * pars.dg * pars.dh) / pars.dh)
    pars.minoffset = 470

    pars.vp_min = 1300.0  # maximum value of vp (in m/s)
    pars.vp_max = 4000.0  # minimum value of vp (in m/s)

    pars.marine = True
    pars.velwater = 1500
    pars.d_velwater = 60
    pars.water_depth = 3500
    pars.dwater_depth = 1000

    pars.fs = False
    pars.source_depth = (pars.Npad + 4) * pars.dh
    pars.receiver_depth = (pars.Npad + 4) * pars.dh
    pars.identify_direct = False

    pars.mute_dir = True
    if noise == 1:
        pars.random_static = True
        pars.random_static_max = 1
        pars.random_noise = True
        pars.random_noise_max = 0.02
    #    pars.mute_nearoffset = True
    #    pars.mute_nearoffset_max = 10

    return pars
Exemplo n.º 6
0
    )

    # Parse the input for training parameters
    args, unparsed = parser.parse_known_args()


    savepath = "./dataset_1"
    logdir = args.logdir
    nthread = args.nthread
    niter = 5000
    batch_size = args.batchsize

    """
        __________________Define the parameters for Case 1______________________
    """
    pars = ModelParameters()
    pars.num_layers = 0
    dhmins = [40, 30, 20]
    layer_num_mins = [5, 12]
    nexamples = 10000

    """
        _______________________Generate the dataset_____________________________
    """
    if not os.path.isdir(savepath):
        os.mkdir(savepath)

    n = 100000
    if args.training != 1:
        for dhmin in dhmins:
            for layer_num_min in layer_num_mins:
Exemplo n.º 7
0
    for dir1 in os.listdir('./'):
        if os.path.isdir(dir1):
            for dir2 in os.listdir(dir1):
                path2 = os.path.join(dir1, dir2)
                if os.path.isdir(path2):
                    dirs.append(path2)

    logdirs = fnmatch.filter(dirs, args.logdir)
    print(logdirs)

    create_data = True
    logdir = args.logdir
    niter = args.niter
    max_batch = 100

    pars = ModelParameters()
    pars.layer_dh_min = 5
    pars.layer_num_min = 48

    pars.dh = 6.25
    pars.peak_freq = 26
    pars.df = 5
    pars.wavefuns = [0, 1]
    pars.NX = 692 * 2
    pars.NZ = 752 * 2
    pars.dt = 0.0004
    pars.NT = int(8.0 / pars.dt)
    pars.resampling = 10

    pars.dg = 8
    pars.gmin = int(470 / pars.dh)
Exemplo n.º 8
0

if __name__ == "__main__":
    import matplotlib.pyplot as plt

    # Initialize argument parser
    parser = argparse.ArgumentParser()

    parser.add_argument("--ND",
                        type=int,
                        default=1,
                        help="Dimension of the model to display")
    # Parse the input for training parameters
    args, unparsed = parser.parse_known_args()

    pars = ModelParameters()
    pars.layer_dh_min = 20
    pars.num_layers = 0
    if args.ND == 1:
        vp, vs, rho = generate_random_1Dlayered(pars)
        vp = vp[:, 0]
        vint = interval_velocity_time(vp, pars)
        vrms = calculate_vrms(vp, pars.dh, pars.Npad, pars.NT, pars.dt,
                              pars.tdelay, pars.source_depth)

        plt.plot(vint)
        plt.plot(vrms)
        plt.show()
    else:
        vp, vs, rho = generate_random_2Dlayered(pars)
        plt.imshow(vp)
Exemplo n.º 9
0
def get_test_error(dirlog, savepath, dataset_path):
    """
        Compute the error on a test set
        
        @params:
        dirlog (str) : Directory containing the trained model.
        savepath (str): Directory in which to save the predictions
        dataset_path (str): Directory of the test set
        
        @returns:
        vrms_rmse (float) : RMSE for Vrms
        vint_rmse: RMSE for Vint
        true_pos: Primary reflection identification: Ratio of true positive
        true_neg: Primary reflection identification: Ratio of true negative
        false_pos: Primary reflection identification: Ratio of false positive
        false_neg: Primary reflection identification: Ratio of false negative
    """

    if os.path.isfile(savepath + ".hdf5"):
        file = h5.File(savepath + ".hdf5")
        vint_rmse = file["vint_rmse"].value
        vrms_rmse = file["vrms_rmse"].value
        true_pos = file["true_pos"].value
        true_neg = file["true_neg"].value
        false_pos = file["false_pos"].value
        false_neg = file["false_neg"].value
        file.close()
    else:
        pars = ModelParameters()
        pars.read_parameters_from_disk(dataset_path + "/model_parameters.hdf5")
        seismic_gen = SeismicGenerator(model_parameters=pars)
        nn = RCNN(input_size=seismic_gen.image_size, batch_size=100)
        tester = Tester(NN=nn, data_generator=seismic_gen)
        toeval = [nn.output_ref, nn.output_vrms, nn.output_vint]
        toeval_names = ["ref", "vrms", "vint"]
        vint_rmse_all = 0
        vrms_rmse_all = 0
        true_pos_all = 0
        true_neg_all = 0
        false_pos_all = 0
        false_neg_all = 0

        tester.test_dataset(savepath=savepath,
                            toeval=toeval,
                            toeval_names=toeval_names,
                            restore_from=dirlog,
                            testpath=dataset_path)
        vp, vint_pred, masks, lfiles, pfiles = tester.get_preds(
            labelname="vp",
            predname="vint",
            maskname="valid",
            savepath=savepath,
            testpath=dataset_path)
        vrms, vrms_pred, _, _, _ = tester.get_preds(labelname="vrms",
                                                    predname="vrms",
                                                    savepath=savepath,
                                                    testpath=dataset_path)
        ref, ref_pred, _, _, _ = tester.get_preds(labelname="tlabels",
                                                  predname="ref",
                                                  savepath=savepath,
                                                  testpath=dataset_path)
        vint = [None for _ in range(len(vp))]
        for ii in range(len(vint)):
            vint[ii] = interval_velocity_time(vp[ii], pars=pars)
            vint[ii] = vint[ii][::pars.resampling]
            vint_pred[ii] = vint_pred[ii] * (pars.vp_max -
                                             pars.vp_min) + pars.vp_min
            vrms_pred[ii] = vrms_pred[ii] * (pars.vp_max -
                                             pars.vp_min) + pars.vp_min
            vrms[ii] = vrms[ii] * (pars.vp_max - pars.vp_min) + pars.vp_min
            ref_pred[ii] = np.argmax(ref_pred[ii], axis=1)
            ind0 = np.nonzero(ref[ii])[0][0]
            masks[ii][0:ind0] = 0
        vint = np.array(vint)
        vint_pred = np.array(vint_pred)
        vrms = np.array(vrms)
        vrms_pred = np.array(vrms_pred)
        ref = np.array(ref)
        ref_pred = np.array(ref_pred)

        masks = np.array(masks)
        nsamples = np.sum(masks == 1)
        vint_rmse = np.sqrt(np.sum(masks * (vint - vint_pred)**2) / nsamples)
        vrms_rmse = np.sqrt(np.sum(masks * (vrms - vrms_pred)**2) / nsamples)

        nsamples = ref.flatten().shape[0]
        true_pos = np.sum(((ref - ref_pred) == 0) * (ref == 1)) / nsamples
        true_neg = np.sum(((ref - ref_pred) == 0) * (ref == 0)) / nsamples
        false_pos = np.sum((ref - ref_pred) == -1) / nsamples
        false_neg = np.sum((ref - ref_pred) == 1) / nsamples

        file = h5.File(savepath + ".hdf5")
        file["vint_rmse"] = vint_rmse
        file["vrms_rmse"] = vrms_rmse
        file["true_pos"] = true_pos
        file["true_neg"] = true_neg
        file["false_pos"] = false_pos
        file["false_neg"] = false_neg
        file.close()

    return vrms_rmse, vint_rmse, true_pos, true_neg, false_pos, false_neg
Exemplo n.º 10
0
        __________________Find model directories______________________
    """
    dirs = []
    for dir1 in os.listdir('./'):
        if os.path.isdir(dir1):
            for dir2 in os.listdir(dir1):
                path2 = os.path.join(dir1, dir2)
                if os.path.isdir(path2):
                    dirs.append(path2)

    logdirs = fnmatch.filter(dirs, args.logdir)
    logdirs.sort()
    """
    _________________________Define the parameters______________________
    """
    pars = ModelParameters()
    pars.flat = False
    pars.NX = 1700
    pars.NZ = 750 * 2
    pars.dh = 6.25
    pars.peak_freq = 26

    pars.num_layers = 0
    pars.layer_dh_min = 10  # minimum number of grid cells that a layer must span
    pars.layer_num_min = 25  # minimum number of layers
    pars.angle_max = 8
    pars.dangle_max = 3
    pars.amp_max = 0
    pars.max_texture = 0.08
    pars.texture_xrange = 1
    pars.texture_zrange = 1.95 * pars.NZ