Exemplo n.º 1
0
def forward_test():
    try:
        f = forward.forward_gpu()
        coef = forward.filter_coefficient()
        geo = forward.geoelectric_model()
        data = forward.forward_data()

        geo_path = [
            '../test_data/forward_model1.json',
            '../test_data/forward_model2.json',
            '../test_data/forward_model3.json'
        ]

        geos = []
        responses = []
        for i in range(len(geo_path)):
            geos.append(forward.geoelectric_model())
            responses.append(forward.forward_data())

        coef.load_cos_coef('../test_data/cos_xs.txt')
        coef.load_hkl_coef('../test_data/hankel1.txt')
        data.generate_time_stamp_by_count(-5, -2, 40)

        f.load_general_params(10, 100, 50)
        f.load_filter_coef(coef)
        f.load_time_stamp(data)

        for i in range(len(geo_path)):
            geos[i].load_from_file(geo_path[i])

            f.load_geo_model(geos[i])
            f.forward()

            responses[i] = f.get_result_magnetic()
            responses[i].name = geos[i].name

        fig = draw_resistivity(*geos)
        fig.show()

        fig = draw_forward_result(*responses)
        fig.show()

        # print(loss(responses[0], responses[1]))

        # print(loss(responses[1], responses[2]))
        # fig.show()

        # fig = draw_forward_result(m)
        #
        # fig.show()

    except Exception as e:
        traceback.print_exc()
        log.error(repr(e))
    finally:
        log.debug('forward_test finished')
Exemplo n.º 2
0
def forward_test():
    try:
        # 正演类
        f = forward.forward_gpu()
        coef = forward.filter_coefficient()
        geo = forward.geoelectric_model()
        geo2 = forward.geoelectric_model()
        iso = forward.isometric_model()
        data = forward.forward_data()

        # 各种数据加载
        coef.load_cos_coef('../test_data/cos_xs.txt')
        coef.load_hkl_coef('../test_data/hankel1.txt')
        geo.load_from_file('../test_data/test_geo_model.json')
        geo2.load_from_file('../test_data/test_geo_model2.json')
        iso.load_from_file('../test_data/test_iso_model.json')
        data.generate_time_stamp_by_count(-5, -2, 20)

        # 测试绘制地电模型
        fig = draw_resistivity(geo,
                               geo2,
                               forward.iso_to_geo(iso),
                               last_height=300)
        fig.show()

        # 正演类加载数据
        f.load_general_params(10, 100, 50)
        f.load_filter_coef(coef)
        f.load_geo_model(geo)
        f.load_time_stamp(data)

        # 正演开始
        f.forward()

        # 获得结果
        m = f.get_result_late_m()
        e = f.get_result_late_e()

        m.name = 'late_m'
        e.name = 'late_e'

        # 绘制结果
        fig = draw_forward_result(m, e)
        fig.show()

        add_noise(m, 0.1)
        fig = draw_forward_result(m)

        fig.show()

    except Exception as e:
        traceback.print_exc()
        log.error(repr(e))
    finally:
        log.debug('forward_test finished')
Exemplo n.º 3
0
def forward_test():
    try:
        f = forward.forward_gpu()
        coef = forward.filter_coefficient()
        geo = forward.geoelectric_model()
        data = forward.forward_data()

        coef.load_cos_coef('../test_data/cos_xs.txt')
        coef.load_hkl_coef('../test_data/hankel1.txt')
        geo.load_from_file('../test_data/forward_model1.json')
        data.generate_time_stamp_by_count(-5, -2, 20)

        f.load_time_stamp(data)
        f.load_geo_model(geo)
        f.load_general_params(10, 100, 50)
        f.load_filter_coef(coef)

        f.forward()

        data = f.get_result_magnetic()
        data.name = 'Model'

        fig = draw_resistivity(geo)
        fig.show()

        fig = draw_forward_result(data)
        fig.show()


    except Exception as e:
        traceback.print_exc()
        log.error(repr(e))
    finally:
        log.debug('forward_test finished')
Exemplo n.º 4
0
def forward_test():
    try:
        f = forward.forward_gpu()
        coef = forward.filter_coefficient()
        geo = forward.geoelectric_model()
        data = forward.forward_data()

        coef.load_cos_coef('../test_data/cos_xs.txt')
        coef.load_hkl_coef('../test_data/hankel1.txt')
        geo.load_from_file('../test_data/forward_model1.json')
        data.generate_time_stamp_by_count(-5, 0, 100)

        f.load_time_stamp(data)
        f.load_geo_model(geo)
        f.load_general_params(10, 100, 50)
        f.load_filter_coef(coef)

        f.forward()

        counts = [40, 60, 80, 100]
        layers = [5, 6, 8, 10, 12]

        fig = plt.figure()
        ax = fig.add_subplot(1, 1, 1, xlabel='layer count', ylabel='time/s')
        for c in counts:
            data.generate_time_stamp_by_count(-5, 0, c)
            f.load_time_stamp(data)

            t = []

            for l in layers:
                geo.resize(l)
                res = npy.ones([l]) * 100
                hei = npy.ones([l]) * 50
                geo.set_item_s('resistivity', list(res))
                geo.set_item_s('height', list(hei))

                f.load_geo_model(geo)
                s = time.clock()
                f.forward()
                e = time.clock()
                t.append(e - s)

            ax.plot(layers, t, label=str(c), marker='+')

        ax.legend()
        plt.savefig(figure=fig, fname='compare')

    except Exception as e:
        traceback.print_exc()
        log.error(repr(e))
    finally:
        log.debug('forward_test finished')
Exemplo n.º 5
0
def forward_test():
    try:
        f = forward.forward_gpu()
        coef = forward.filter_coefficient()
        geo = forward.geoelectric_model()
        data = forward.forward_data()
        m_data = forward.forward_data()

        coef.load_cos_coef('../test_data/cos_xs.txt')
        coef.load_hkl_coef('../test_data/hankel1.txt')
        geo.load_from_file('../test_data/forward_model1.json')
        data.generate_time_stamp_by_count(-5, -2, 20)

        f.load_time_stamp(data)
        f.load_geo_model(geo)
        f.load_general_params(10, 100, 50)
        f.load_filter_coef(coef)

        f.forward()

        data = f.get_result_magnetic()
        data.name = 'CUDA'
        m_data.resize(data.count)
        m_data.time = data.time
        m_data.idx = data.idx
        m_data.name = 'Matlab'

        m_data.set_item_s('response', [
            1.127565, 0.998018, 0.894319, 0.805530, 0.723312, 0.642532,
            0.561468, 0.481032, 0.403363, 0.330769, 0.265176, 0.207871,
            0.159425, 0.119744, 0.088197, 0.063800, 0.045399, 0.031824,
            0.022005, 0.015023
        ])

        fig = draw_resistivity(geo)
        fig.show()

        fig = draw_forward_result(data, m_data)
        fig.show()

        print('loss:')
        print(loss(m_data, data))

    except Exception as e:
        traceback.print_exc()
        log.error(repr(e))
    finally:
        log.debug('forward_test finished')
Exemplo n.º 6
0
def inversion():
    f = forward.forward_gpu()

    real_geo_model = forward.geoelectric_model()
    real_geo_model.load_from_file('../test_data/test_geo_model.json')

    coef = forward.filter_coefficient()
    coef.load_cos_coef('../test_data/cos_xs.txt')
    coef.load_hkl_coef('../test_data/hankel1.txt')

    time = forward.forward_data()
    time.generate_time_stamp_by_count(-5, -2, 20)

    f.load_general_params(10, 100, 50)
    f.load_filter_coef(coef)
    f.load_geo_model(real_geo_model)
    f.load_time_stamp(time)

    f.forward()

    real_response = f.get_result_magnetic()
    real_response.name = real_geo_model.name

    # helper.add_noise(m, 0.05)
    real_response_m = real_response['response']

    inversion_geo_model = forward.isometric_model()
    inversion_geo_model.resize(20)
    inversion_geo_model.height = 10
    inversion_geo_model.name = 'inversion'

    inv = Inversion(inversion_geo_model, f)
    inv.set_initial_geo_model(npy.ones([inversion_geo_model.count]) * 50.0)
    inv.set_target_magnetic(real_response_m)

    for i in range(500):
        log.info('iteration %d ' % i)

        inv.rand_grad()
        inv.update_model()
        inv.update_step()

        log.info('iteration %d, loss = %f' % (i, inv.loss()))
        if i % 10 == 0:
            inversion_geo_model.set_item_s('resistivity',
                                           inv.geo_model.tolist())
            inversion_geo_model.name = 'Inversion'
            f.load_geo_model(forward.iso_to_geo(inversion_geo_model))

            f.forward()
            inversion_response = f.get_result_magnetic()
            inversion_response.name = 'Inversion'

            fig = helper.draw_resistivity(
                real_geo_model,
                forward.iso_to_geo(inversion_geo_model),
                last_height=240)
            fig.show()

            fig = helper.draw_forward_result(real_response, inversion_response)
            fig.show()

            print('loss = %f' % helper.loss(real_response, inversion_response))
            pass

        pass