1. 程式人生 > >Gym小記(六)

Gym小記(六)

試用gym wrappers

        gym wrappers用於將環境進行打包,我們可以使用這個模組來記錄自己的演算法在環境中的表現,並拍攝自己演算法學習的視訊,示例如下:

import gym
from gym import wrappers
env=gym.make('CartPole-v0')
env=wrappers.Monitor(env,'/tmp/cartpole-experiment-1')
for i_episode in range(20):
        observation=env.reset()
        for t in range(100):
                env.render()
                print(observation)
                action=env.action_space.sample()
                s,r,done,info=env.step(action)
                if done:
                        print("Episode finished after {} timestep".format(t+1))
                        break

        其中我們僅僅比平時多了一個對env的封裝wrappers.Monitor,便會在我們所指定的目錄彙總記錄我們演算法的效能。我們可以直接看Monitor類的定義,從而加深對這個類的理解。檢視指定目錄:


        可見,資料夾中包含了兩種格式的檔案,一種是.json檔案格式,一種是.mp4格式檔案。.mp4格式就不用多說,如果沒有合適的視訊檢視器,那可以用瀏覽器開啟。下面介紹一下.json格式檔案。

        JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。JSON採用完全獨立於語言的文字格式,這些特性使得JSON成為理想的資料交換語言,它易於閱讀和編寫,同時易於機器解析和生成。

        JSON有兩種基礎結構:

        1)”名稱/值“對的集合(A collection of name/value pairs)。不同的語言中,它被理解為物件(object),記錄(record),結構(struct),字典(dictionary),雜湊表(hash table),有鍵列表(keyed list),或者關聯陣列(associative array)。

        2)值的有序列表(An ordered list of values)。在大部分語言中,它被理解為陣列(array)。

        下面我們開啟openaigym.episode_batch.0.15433.stats.json檔案來看一下:


        上面是我整理了之後的樣子,因為它本身是所有資料都在一行的,所以截圖的話只能看見前面的資料,於是我就給它分行了。

        從示例中可以看出JSON的兩種基礎資料結構,比如episode_types是名稱,後面的["t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t"...]就是值的有序列表。

        該檔案中記錄的是我們訓練過程中的各種資料,此外,另外兩個檔案openaigym.manifest.0.15433.manifest.json和openaigym.video.0.15433.video000000.meta.json則分別如下圖所示:

        1)openaigym.manifest.0.15433.manifest.json:


        2)openaigym.video.0.15433.video000000.meta.json:


        瞭解完gym.wrappers.Monitor所記錄的檔案之後,我們繼續考慮如何將這些結果上傳到OpenAI Gym:

gym.upload('/tmp/cartpole-experiment-1',api_key='sk_Gmo4wYBhRoeJ9shfSS8hvg')

        這樣便將結果上傳到了OpenAI Gym。不過upload函式現在暫時不能用了:


        NotImplementedError,所以這樣看來我們暫時是不能用upload功能將我們的程式碼上傳到OpenAI Gym咯~。

        但是我們可以看看以前用upload得到的結果:

[2017-05-11 00:11:13,592] [CartPole-v0] Uploading 20 episodes of training data
[2017-05-11 00:11:21,614] [CartPole-v0] Uploading videos of 3 training episodes (8459 bytes)
[2017-05-11 00:11:33,060] [CartPole-v0] Creating evaluation object from /tmp/cartpole-experiment-1 with learning curve and training video
[2017-05-11 00:11:33,669] 
****************************************************
You successfully uploaded your evaluation on CartPole-v0 to
OpenAI Gym! You can find it at:

    https://gym.openai.com/evaluations/eval_mVPNxudETYOY9eCCwwWzw

****************************************************