日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

在unity中创建python机器学习环境

發(fā)布時(shí)間:2024/3/13 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在unity中创建python机器学习环境 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
# 創(chuàng)建一個(gè)新的學(xué)習(xí)環(huán)境 本教程將介紹創(chuàng)建unity環(huán)境的過(guò)程
unity環(huán)境是使用unity引擎來(lái)訓(xùn)練增強(qiáng)學(xué)習(xí)代理器的應(yīng)用
設(shè)置unity項(xiàng)目
1. 打開(kāi)一個(gè)項(xiàng)目導(dǎo)入unity機(jī)器學(xué)習(xí)包, 或者新建一個(gè)項(xiàng)目重新導(dǎo)入 增強(qiáng)學(xué)習(xí) 接口包:??
?* [ML-Agents package without TensorflowSharp](https://s3.amazonaws.com/unity-agents/ML-AgentsNoPlugin.unitypackage)?
?* [ML-Agents package with TensorflowSharp](https://s3.amazonaws.com/unity-agents/ML-AgentsWithPlugin.unitypackage)?
2. 重命名 `TemplateAcademy.cs` (包括類名) :
所有 Template 文件 都在 `Assets -> Template -> Scripts`里. 通常命名方式為 `YourNameAcademy`.
3. 把 `YourNameAcademy.cs` 拖到一個(gè)新的對(duì)象上 (`Unity` -> `GameObject` -> `Create Empty`)
同時(shí)重命名這個(gè)對(duì)象 `YourNameAcademy`.? `YourNameAcademy` 會(huì)用來(lái)控制所有環(huán)境的邏輯,
確保附加的對(duì)象是一個(gè)留在場(chǎng)景中,不管環(huán)境重置,或其他環(huán)境行為
4. 把 `Brain.cs` 拖到一個(gè)新的對(duì)象上并重命名 `YourNameBrain1`.
把對(duì)象作為 `YourNameAcademy` 的子對(duì)象
注意 你可以有多個(gè) brains 在 Academy 下但所有brain不同名
5. 禁用窗口對(duì)話框和屏幕分辨率
??? 1.`Edit` -> `Project Settings` -> `Player` -> `Resolution and Presentation`.
??? 2. 設(shè)置 `Display Resolution Dialogue` 為 `Disabled`.
??? 3.勾選`Run In Background`.
??? 4. 點(diǎn)擊 `Splash Image`.
??? 5. 取消 `Show Splash Screen` (Unity Pro only)
6. 如果你要在Unity中使用Tensorflow Sharp, 你必須:
?1. 確保你使用Unity 2017.1以上版本.
?2. 確保你已經(jīng)加載了TensorflowSharp. 下載地址(https://s3.amazonaws.com/unity-agents/TFSharpPlugin.unitypackage).
?3. `Edit` -> `Project Settings` -> `Player`
?4. 對(duì)于你選擇的平臺(tái)(**`PC, Mac and Linux Standalone`**, **`iOS`** 或者 **`Android`**):??
??1. `Other Settings`.
??2. 選擇 `Scripting Runtime Version`為`Experimental (.NET 4.6 Equivalent)`
??3. 在`Scripting Defined Symbols`, 添加字符`ENABLE_TENSORFLOW`
?5. 重啟unity
操作`YourNameAcademy` 1. 點(diǎn)擊對(duì)象**`YourNameAcademy`**. 2. 在inspector面板, 可以設(shè)置academy一下內(nèi)容:
?* **`Max Steps`**每一訓(xùn)練集的最大長(zhǎng)度(如果您不希望環(huán)境在某一時(shí)間后重置),則設(shè)置為0。
?* **`Wait Time`** 在測(cè)試環(huán)境中運(yùn)行時(shí)的步驟之間的實(shí)時(shí)性。僅當(dāng)使用步驟發(fā)生在` update() `。
?* **`Frames To Skip`** 在步驟間跳過(guò)的幀數(shù)(或物理更新)。代理器會(huì)在每一幀都調(diào)用但是行為只會(huì)在每步中出現(xiàn).
?* **`Training Configuration`** 和 **`Inference Configuration`** 第一個(gè)定義了引擎在訓(xùn)練時(shí)的配置,第二個(gè)定義在測(cè)試/推理時(shí)間. 當(dāng)參數(shù)`train_model` 設(shè)置為T(mén)rue時(shí)訓(xùn)練模式只能為外部訓(xùn)練 . 可調(diào)參數(shù)如下:
??? * `Width`和`Height` 對(duì)應(yīng)的寬度和高度,窗口的像素(必須大于0). 通常在訓(xùn)練期間將其設(shè)置為小尺寸,而在推理過(guò)程中用于可視化的更大尺寸。
??? * `Quality Level` 確定如何執(zhí)行渲染. 通常在訓(xùn)練過(guò)程中設(shè)置為小值,在推理過(guò)程中為了可視化價(jià)使用高值.
??? * `Time Scale` 物理加速. 如果環(huán)境使用的物理計(jì)算, 訓(xùn)練中提高這個(gè)值, 在推理中設(shè)置為 `1.0f`. 否則設(shè)置為 `1.0f`.
??? * `Target Frame Rate` 幀渲染頻率. 如果環(huán)境使用觀察, 在訓(xùn)練中提高這個(gè)值, 推理中設(shè)置為`60`. 如果沒(méi)有使用觀察, 訓(xùn)練中設(shè)置為 `1`
?* **`Default Reset Parameters`** 在重置時(shí)你可以設(shè)置默認(rèn)配置. 字符會(huì)映射為浮點(diǎn), 你能在 academy中調(diào)用 `resetParameters["YourDefaultParameter"]`
3. 在 **`InitializeAcademy()`**中, 你可以定義 Academy的初始化. 請(qǐng)注意,該命令在訓(xùn)練會(huì)話開(kāi)始時(shí)只運(yùn)行一次. 3. 在 **`AcademyStep()`**中, 定義環(huán)境邏輯的每一步. 使用這個(gè)函數(shù)去修改環(huán)境中的代理器. 4. 在 **`AcademyReset()`**中, 每新訓(xùn)練集重置. 它應(yīng)該包含對(duì)于特定環(huán)境的代碼用來(lái)設(shè)置環(huán)境. 注意`AcademyReset()` 訓(xùn)練會(huì)話開(kāi)始時(shí) 調(diào)用 用來(lái)確保第一個(gè)集和其他一樣. ## 執(zhí)行`YourNameBrain`
每個(gè)在academy下的brain :
1. 點(diǎn)擊`YourNameBrain` 2. 在inspector面板中, 你可以修改**`Brain Parameters`**
??? * `State Size` 提供給代理器的變量數(shù) (s).**public override List<float> CollectState()里的變量
??? * `Action Size` 每個(gè)代理采取的可能操作數(shù) .**public override void AgentStep(float[] act)里接收act的變量
??? * `Memory Size` 代理器記住每一步的浮動(dòng)數(shù).
??? * `Camera Resolutions` 包含分辨率參數(shù)的可伸縮長(zhǎng)度列表:`height`和`width`。 .
?如果你想攝像機(jī)輸出為黑白勾選 `Black And White` .
??? * `Action Descriptions` 用人類可讀的語(yǔ)言描述每個(gè)可用動(dòng)作的意思的列表.
??? * `State Space Type` 和 `Action Space Type`. 同樣`discrete`或者`continuous`.
??????? * `discrete` 對(duì)應(yīng)的行為為 `int`.
??????? * `continuous` 對(duì)應(yīng)的行為為 `float`.
?
3. 如果你想運(yùn)行時(shí)收集數(shù)據(jù), 勾選 **`Collect Data`**. 這個(gè)方法中, 狀態(tài)和行動(dòng)通過(guò)大腦將保存在文件夾`saved_plays`
4. 你可以選擇 `YourNameBrain` 的類型. 一下四個(gè)可選項(xiàng):
?* `External` : 如果你想調(diào)用python,環(huán)境中至少有一個(gè)外部模式
?* `Player` : 手動(dòng)控制你的代理器. 如果行為空間是離散的, 必須將輸入鍵映射到相應(yīng)的整數(shù)值. 如果行為空間是連續(xù)的, 你必須映射輸入鍵相應(yīng)指標(biāo)和浮點(diǎn)值 .
?* `Heuristic` : 你可以讓你的大腦自動(dòng)對(duì)觀察結(jié)果和狀態(tài)做預(yù)設(shè)好的反應(yīng). 你需要拖一個(gè) `Decision` 腳本到`YourNameBrain`. 創(chuàng)建自定義反應(yīng), 你必須 :
?? *? 重命名 `TemplateDecision.cs` (還有類名) 你想要的新反應(yīng)的名字. 約定的命名方式為 `YourNameDecision`.
?? *? 執(zhí)行 `Decide`: 給定一個(gè)代理的狀態(tài)、觀察和記憶,這個(gè)函數(shù)必須返回一個(gè)與代理器所采取的操作相對(duì)應(yīng)的浮動(dòng)數(shù)組. 如果行動(dòng)空間為離散, 這個(gè)數(shù)組為 1.
?? *? 隨意項(xiàng), 執(zhí)行 `MakeMemory`: 給定一個(gè)代理的狀態(tài)、觀察和記憶,這個(gè)函數(shù)必須返回一個(gè)與代理的新記憶相對(duì)應(yīng)的浮動(dòng)數(shù)組.
?* `Internal` : 注意這個(gè)選項(xiàng)你必須有 Tensorflow Sharp 設(shè)置. 下面是必須完成的地方:
?? *? `Graph Model` : 這個(gè)必須為 `bytes`文件對(duì)應(yīng)已經(jīng)訓(xùn)練好的Tensorflow 圖. (你必須先把二進(jìn)制文件拖進(jìn)unity,再把二進(jìn)制文件拖到inspector)
?? *? `Graph Scope` : 當(dāng)你訓(xùn)練你的tensorflow 模型時(shí)設(shè)置了一個(gè)范圍, 所有你的占位符(placeholder)名稱將有前綴. 你必須在此指定前綴.
?? *? `Batch Size Node Name` : 如果批處理大小是圖的輸入之一,則必須在占位符中指定名稱. brain將自動(dòng)使批量大小等于與brain相連的代理數(shù)量.
?? *? `State Node Name` : 如果你的圖形使用狀態(tài)作為輸入,則必須在此占位符中指定名稱.
?? *? `Recurrent Input Node Name` : 如果你的圖形使用循環(huán)輸入/記憶作為輸入,并輸出新的循環(huán)輸入/記憶,則必須在輸入占位符中指定名稱.
?? *? `Recurrent Output Node Name` : 如果你的圖形使用循環(huán)輸入/記憶作為輸入,并輸出新的循環(huán)輸入/記憶,則必須在輸入占位符中指定名稱.
?? * `Observation Placeholder Name` : 如果你的圖使用觀察作為輸入,你必須在此處指定。注意,觀測(cè)值等于brain參數(shù)中“Camera Resolutions”的長(zhǎng)度
?? * `Action Node Name` : 指定與圖中的brain動(dòng)作相對(duì)應(yīng)的占位符名稱. 如果行動(dòng)空間是連續(xù)的, 輸出一定為`Action Space Size`一個(gè)浮點(diǎn)長(zhǎng)度方向的張量(tensor) , 如果行動(dòng)空間為離散, 輸出必須為一個(gè)整形為1長(zhǎng)度的張量.
?? * `Graph Placeholder` : 如果你的圖需要額外的固定輸入(例如:噪聲水平),你可以在這里指定它們. 注意在你的圖里, 這些必須與int的一維張量或大小為1的浮點(diǎn)對(duì)應(yīng).
???? * `Name` : 對(duì)應(yīng)占位符的名字.
???? * `Value Type` : 整型和浮點(diǎn).
???? * `Min Value`和'Max Value' : 指定最大最小值供給(包含最值) 占位符選擇. 該值將在每個(gè)步驟的均勻分布中進(jìn)行采樣. 如果你想讓這個(gè)值固定 同時(shí)設(shè)置 `Min Value` 和`Max Value` 為同樣的值.
???
## 執(zhí)行`YourNameAgent`
1. 重命名`TemplateAgent.cs`. 約定的命名為`YourNameAgent`. 2.把 `YourNameAgent.cs` 代表代理器的對(duì)象上.
(Example: 如果你想做自動(dòng)駕駛, 把 `YourNameAgent.cs` 掛到看上去像車(chē)的對(duì)象上)
3. 在你代理器inspector面板, 把代理器對(duì)應(yīng)的brain拖進(jìn) `Brain` 框.
注意,同一個(gè)brain可以有不同的代理器.
如果你通過(guò)腳本的方式想給一個(gè)代理器一個(gè)brain或者改變它的brain, 使用`ChangeBrain()`.
4. 在你代理器inspector面板, 你可以指定攝像頭, 你的代理器可以用來(lái)觀察. 這么做, 拖 `Observations` 框. 注意 如果你想要一個(gè)攝像機(jī)去單獨(dú)移動(dòng)你的代理器, 你可以設(shè)置你的攝像頭作為代理器的子對(duì)象 5. 如果 `Reset On Done` 被勾選, `Reset()` 會(huì)在代理器完成時(shí)被調(diào)用.否則, `AgentOnDone()` 會(huì)被調(diào)用. 注意如果`Reset On Done`沒(méi)有勾選, 代理器會(huì)被保持 "done" 直到Academy重置. 這就意味著它不會(huì)在環(huán)境中采取任何行為. 6. 執(zhí)行`YourNameAgent.cs` :
?* `InitializeAgent()` : 這個(gè)方法用來(lái)初始化你的代理器. 代理器創(chuàng)建時(shí)被調(diào)用.
?* `CollectState()` : 必須返回與代理器所在的狀態(tài)相對(duì)應(yīng)的浮動(dòng)列表. 如果狀態(tài)空間類型為離散, 返回長(zhǎng)度1的列表,其中包含與您的狀態(tài)等價(jià)的浮點(diǎn)數(shù)
?* `AgentStep()` : 這個(gè)方法每幀調(diào)用, 你必須定義你的代理器會(huì)輸入的行為. 你必須定義 獎(jiǎng)勵(lì) 和 代理器是否完成.這樣做, 修改代理器中的 `reward` 和`done`.
?* `AgentReset()` : 這個(gè)函數(shù)在開(kāi)始時(shí)調(diào)用, 當(dāng)Academy重置和當(dāng)代理器完成時(shí) ( `Reset On Done` 被勾選).
?* `AgentOnDone()` : 如果 `Reset On Done` 沒(méi)有被勾選, 這個(gè)函數(shù)會(huì)在代理器完成時(shí)被調(diào)用. `Reset()` 只會(huì)在Academy重置時(shí)調(diào)用
如果你想腳本調(diào)用代理器, 我們建議你保存代理器為預(yù)制件和在每一步或者重置時(shí)實(shí)例化. 如果你想這么做, 你可以使用`GiveBrain(brain)`來(lái)?yè)碛写砥?
你也能用 `RemoveBrain()` 從brain中取消
# 定義反饋函數(shù)
這個(gè)獎(jiǎng)勵(lì)函數(shù)用來(lái)獎(jiǎng)勵(lì)或者懲罰代理器發(fā)生行為.
參數(shù)調(diào)整的參考*****
* 獎(jiǎng)勵(lì)
??? * 得分
??? * 還活著
??? * 成功消滅敵人
??? * 獲得HP
??? * 上升階級(jí)
* 懲罰
??? * 受傷
??? * 下跌階級(jí)
??? * 代理器死亡
小的懲罰同樣被在每一步以 最佳代理行為是盡可能快地完成一訓(xùn)練集 注意 獎(jiǎng)勵(lì)在每一步中都重置為0, 你必須添加獎(jiǎng)勵(lì) (`reward += rewardIncrement`). 如果你在Academy中使用`skipFrame` 和設(shè)置你的獎(jiǎng)勵(lì)不是遞增的, 因?yàn)楠?jiǎng)勵(lì)每步而不是每幀你會(huì)丟失信息. ## Agent Monitor
* 你可以添加 `AgentMonitor.cs` t每個(gè)代理器中 `YourNameAgent.cs`. 在inspector面板, 你可以看到:
? * `Fixed Position` : 如果被勾選, 檢測(cè)器 會(huì)一直在屏幕的左上角. 注意你只能使用一個(gè)檢測(cè)器,否則左上角會(huì)重合.
? * `Vertical Offset`:如果`Fixed Position`沒(méi)有被勾選, 檢測(cè)器會(huì)一直跟著代理器. 使用`Vertical Offset`來(lái)決定檢測(cè)器離代理器多遠(yuǎn)
? * `Display Brain Name` :? brain名,如果有同名的代理器在不同的brain那么這個(gè)選項(xiàng)就很有用
? * `Display Brain Type` : 展示brain的類型.
? * `Display FrameCount` :? 從代理器開(kāi)始到現(xiàn)在的幀數(shù).
? * `Display Current Reward`: 實(shí)時(shí)獲取代理器獲得的獎(jiǎng)勵(lì)數(shù)
? * `Display Max Reward` : 從訓(xùn)練會(huì)話開(kāi)始,獲得的最大獎(jiǎng)勵(lì).
? * `Display State` : 代理器的狀態(tài).
? * `Display Action` : 代理器的行為.
如果從外部brain中傳入值, 那么這個(gè)值會(huì)在檢測(cè)器上用條狀來(lái)展示 (綠色代表正數(shù) /紅色代表負(fù)數(shù)).
這個(gè)條狀最大值默認(rèn)為1
但如果代理器的值大于這個(gè)值,那么代理器的值會(huì)被設(shè)為最大值

請(qǐng)關(guān)注我的微信公眾號(hào)獲取有關(guān)unity機(jī)器學(xué)習(xí)的推送:

總結(jié)

以上是生活随笔為你收集整理的在unity中创建python机器学习环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。