Peerachet's MiniBlog

Probability Distribution in Pytorch

ในที่นี่จะกล่าวถึงอะไรก็ตามที่เกี่ยวกับ Random Variable ใน Pytorch

การสร้าง Computation Graph นั้นมีหลายส่วนที่เกี่ยวข้องกับ Random Variable เช่น การ initialize ค่า weight ไปจนถึงการสุ่มเลือก Action ในงานที่ใช้ Reinforcement Learning ดังนั้นในส่วนนี้เราจะมาดูกันว่า ในกรณีต่างๆ นี้เราสามารถใช้งานอะไรได้อย่างไรบ้าง

เริ่มจากตัวอย่างการ initial tensor แบบ Normal, Uniform และ Bernoulli Distribution

import torch
torch.manual_seed(1234)
# Normal
a = torch.randn(4,4)

# Uniform
a = torch.Tensor(4,4).uniform_(0,1)

#Bernoulli (out_i ~ Bernoulii(p_i=input_i))
a = torch.bernoulli(torch.Tensor(4,4).uniform_(0,1))

ซึ่งส่วนของ Bernoulii ค่า Probability ที่ตำแหน่ง i = 1 นั้นจะเท่ากับตำแหน่ง ณ position i แล้ว sampling ออกมาให้เป็น 0 หรือ 1 ตามค่า probability นี้

ทีนี้มาดูการสุ่มแบบ multi-class บ้าง เช่นในกรณี Reinforcement Learning ที่ต้องการสุ่ม action ไปตาม Distribution ที่ predict ออกมาได้จะทำอย่างไร สมมติ มี action ที่เป็นไปได้อยู่ 5 แบบ แต่ละแบบมี prob ที่ต่างๆ กันตาม action_prob ทีนี้อยากเลือกออกมา 3 action จาก distribution นี้ก็สามารถใช้คำสั่ง multinomial ได้

การสร้างไฟล์ Exe ของ Python ที่ใช้ PyQT5 ด้วย PyInstaller

ปกติการ Compile ทำได้ไม่ยากแต่ว่าพอใช้ PyQT5 เข้าไปด้วยแล้วกลับไม่ผ่าน

ประการแรกที่ไม่ผ่านก็เพราะ recursion reach max depth วิธีการแก้ไขให้ไปเพิ่มสองบรรทัดนี้ไฟล์ [yourprogram].spec

import sys
sys.setrecursionlimit(5000)

ประการที่สองคือไม่อยากให้โปรแกรมแสดงหน้าจอดำๆ ให้เกะกะ วิธีการคือแก้ค่าในไฟล์ [yourprogram].spec อีกเช่นกันโดยแก้ที่ console=True ให้เป็น False ดังนี้

แนะนำ Pymunk เครื่องมือช่วยจำลองระบบฟิสิกส์ในโลก 2 มิติ

เกมสองมิติอาจจะไม่มีคนเล่นแล้ว แต่อย่างน้อยก็เป็นพื้นฐานสำหรับการพัฒนาเกมในระดับสูงขึ้น

ระบบฟิสิกส์ในเกมเป็นส่วนหนึ่งที่ทำให้ผู้เล่นรู้สึกได้ว่าเกมนี้มีความสมจริง ยกตัวอย่างเช่น เกม Angry Bird เป็นต้น ซึ่งเกมจะต้องมีความสามารถต่างๆ ทั้งการคำนวณการเคลื่อนที่ภายใต้แรงโน้มถ่วง การชนกันของวัตถุ การหมุน มวล ความเร็ว ไปจนถึงเปลี่ยนแรง ความเร็ว ให้กลายเป็นตำแหน่งที่จะแสดงผลจริงๆ ซึ่งส่วนนี้หากจะทำเองจริงๆ จะต้องใช้พลังพอสมควรที่จะต้องคำนวณตามหลักฟิสิกส์

เขียนโปรแกรมทำอักษรวิ่งบน Terminal ด้วย Python แบบไม่ต้องติดตั้ง Python

เมื่อเช้ากำลังมองหา Online Interpreter ของภาษา Python แล้วบังเอิญไปเจอเว็บนี้มา

ตอนเด็กๆ ที่หัดเขียนโปรแกรมนั้นก็จะชอบทำอะไรที่ออกแนวเคลื่อนไหวได้มากกว่าแค่แสดงผลนิ่งๆ อย่างเช่นทำเลียนแบบ Screen Saver ที่มีตัวอักษรวิ่งไปวิ่งมา หรือเส้นตรงที่เด้งไปมา (เด็กสมัยนี้คงไม่รู้จัก) เป็นต้น