iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
AI & Data

人工智慧(RL系列) 完爆遊戲30天系列 第 13

Day13 視覺化&前處理

  • 分享至 

  • xImage
  •  

今天介紹對整個強化學習很重要的兩塊,視覺化方法跟資料前處理~前面如果有跑過unit3的朋友其實就有發現視覺化跟前處理的程式碼吧!他們的功能一個是讓訓練可視化與,另一個則有助於加快模型訓練。

視覺化

這裡介紹或有點不直覺,但在Atari遊戲跟mujoco模擬來說,把資料放在視窗上呈現是件消耗的事情,尤其是mujoco這類需要用到3D渲染的技術。對於訓練看視窗或許是不必要的,只要使得它在底下能夠計算就行,但是因為這次我們是用selenium操控瀏覽器,所以基本上無須煩惱這塊,畫面的產生交給chrome就行,我們只需用javascript跟瀏覽器互動,並定時的擷取畫面。

前處理

對強化學習來說,從理解圖像內容,至從規則中找出最大化獎勵,是兩件事情。為了有效簡化模型負擔,我們會用些二值化的方法讓減輕模型負擔,另外用縮圖的方式減少計算資源消耗,畢竟其實在整個遊戲畫面上,空白畫面太多,重要的訊息就在於主角的位置、跟敵人的位置那幾個而已。

資料倉儲

實現儲存資料,處理的資料包括:遊戲畫面、動作紀錄、獎勵值、是否中止、結束畫面、訓練回合、探索值(有多少機率不是採取max,而是隨機)

def save_obj(obj, name ): # 存物件方法
    with open('objects/'+ name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)
def load_obj(name ): # 讀物件方法
    with open('objects/' + name + '.pkl', 'rb') as f:
        return pickle.load(f)

畫面擷取,執行javascript語法取圖像:

def grab_screen(_driver):
    image_b64 = _driver.execute_script(getbase64Script) 
    screen = np.array(Image.open(BytesIO(base64.b64decode(image_b64))))
    image = process_img(screen)#processing image as required
    return image

前處理,畫面二值化與縮小:

def process_img(image):
    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    image = image[:300, :500] #Crop Region of Interest(ROI)
    image = cv2.resize(image, (80,80))
    return image

產生視窗,同時讓視窗具有迭代性值,可不斷傳入圖像進視窗:

def show_img(graphs = False):
    while True:
        screen = (yield)
        window_title = "logs" if graphs else "game_play"
        cv2.namedWindow(window_title, cv2.WINDOW_NORMAL)
        imS = cv2.resize(screen, (800, 400))
        cv2.imshow(window_title, screen)
        if (cv2.waitKey(1) & 0xFF == ord('q')):
            cv2.destroyAllWindows()
            break

資料倉儲初始化,讓所有的訓練紀錄清空:

def init_cache():
    save_obj(INITIAL_EPSILON,"epsilon")
    t = 0
    save_obj(t,"time")
    D = deque() # 一種python的資料結構
    save_obj(D,"D")

結語

好哩今天介紹到這邊,下篇將介紹把重要的DQN模型拉~我們明天見囉~


上一篇
Day12 Agent類別實作
下一篇
Day14 keras layers(上)
系列文
人工智慧(RL系列) 完爆遊戲30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言