示例#1
0
def Main():
    print("Starting")
    global TIMER
    TIMER = Timer()

    oparser = argparse.ArgumentParser(
        description="intelligent crawling with q-learning")
    oparser.add_argument(
        "--config-file",
        dest="configFile",
        required=True,
        help="Path to config file (containing MySQL login etc.")
    oparser.add_argument(
        "--save-dir",
        dest="saveDir",
        default=".",
        help=
        "Directory that model WIP are saved to. If existing model exists then load it"
    )
    oparser.add_argument(
        "--delete-duplicate-transitions",
        dest="deleteDuplicateTransitions",
        default=False,
        help="If True then only unique transition are used in each batch")
    oparser.add_argument(
        "--language-pair",
        dest="langPair",
        required=True,
        help="The 2 language we're interested in, separated by ,")
    options = oparser.parse_args()

    np.random.seed()
    np.set_printoptions(formatter={'float': lambda x: "{0:0.1f}".format(x)},
                        linewidth=666)

    sqlconn = MySQL(options.configFile)

    hostName = "http://vade-retro.fr/"
    #hostName = "http://www.buchmann.ch/"
    #hostName = "http://www.visitbritain.com/"
    #pickleName = hostName + ".pickle"

    env = Env(sqlconn, hostName)
    # if os.path.exists(pickleName):
    #     with open(pickleName, 'rb') as f:
    #         print("unpickling")
    #         env = pickle.load(f)
    # else:
    #     env = Env(sqlconn, hostName)
    #     with open(pickleName, 'wb') as f:
    #         print("pickling")
    #         pickle.dump(env,f)

    languages = Languages(sqlconn.mycursor)
    params = LearningParams(languages, options.saveDir,
                            options.deleteDuplicateTransitions,
                            options.langPair)

    tf.reset_default_graph()
    qns = Qnets(params, env)
    init = tf.global_variables_initializer()

    saver = tf.train.Saver()
    with tf.Session() as sess:
        #with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
        sess.run(init)

        qns.q[0].PrintAllQ(params, env, sess)
        #WalkAll(env, params, sess, qns.q[0])
        print()

        TIMER.Start("Train")
        totRewards, totDiscountedRewards = Train(params, sess, saver, env, qns)
        TIMER.Pause("Train")

        #qn.PrintAllQ(params, env, sess)
        #env.WalkAll(params, sess, qn)

        Walk(env, sys.maxsize, params, sess, qns.q[0], True)

        del TIMER

        plt.plot(totRewards)
        plt.plot(totDiscountedRewards)
        plt.show()

        plt.plot(qns.q[0].corpus.losses)
        plt.plot(qns.q[1].corpus.losses)
        plt.show()

        plt.plot(qns.q[0].corpus.sumWeights)
        plt.plot(qns.q[1].corpus.sumWeights)
        plt.show()

    print("Finished")