25%
49,500원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
addObservation이 안됩니다.
Assets\ML-Agents\Examples\GridWorld\Scripts\GridAgent.cs(88,20): error CS1061: 'VectorSensor' does not contain a definition for 'addObservation' and no accessible extension method 'addObservation' accepting a first argument of type 'VectorSensor' could be found (are you missing a using directive or an assembly reference?)유니티에 다음과 같은 오류가 뜨네요.
- 해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
여러 Area를 동시에 학습
안녕하세요, Drone 강의 부분에서, Area를 GridWorld에서 했던 것처럼 여러 Area를 복사하여 한 씬에 넣고 동시에 학습시키면 step이 빨리 오르는 효과를 볼 수 있을 것 같다고 생각했습니다. 한 area를 여러 개 복사한 뒤에 학습을 진행하려 했는데, 다음과 같은 오류로 잘 되지 않았습니다. 어떻게 해결해 볼 수 있을까요? critic_loss = F.mse_loss(target_q, q)Traceback (most recent call last): File "DDPG.py", line 240, in <module> actor_loss, critic_loss = agent.train_model() File "DDPG.py", line 144, in train_model reward = np.stack([b[2] for b in batch], axis=0) File "<__array_function__ internals>", line 6, in stack File "C:\Users\anaconda3\envs\mlagent2\lib\site-packages\numpy\core\shape_base.py", line 426, in stack raise ValueError('all input arrays must have the same shape')ValueError: all input arrays must have the same shape
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
드론 작동
안녕하세요! 혹시 드론의 크기를 키우면 스크립트에서 변경해야 할 내용이 있나요? 영상과 똑같이 한 후 terrain을 추가하고 드론의 크기를 키우면 드론이 움직이지 않아요..
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
혹시 응용편은 어디서 볼 수 있을까요?
응용편 보고 싶은데, 인프런에는 안 보이네요. 혹시 어디서 응용편을 강의 하시는 지 가르쳐 줄 수 있을까요?
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
karting asset
karting asset을 다운 받아서 OvalTrack을 화면에 추가하려고 하는데 트랙 모양이 왜 이렇게 뜨는 건가요?asset을 지우고 다시 설치해도 똑같아요
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
using Unity.MLAgents; 오류
이 오류는 어떻게 해결하나요?구글링 해서 어셈블리를 추가한다고 봤는데 어떤 것을 추가해야하는지 잘 모르겠습니다.
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
mlagents-learn --help
3DBall을 훈련 시키기 전에 cmd 창에 mlagents-learn --help를 입력했을 때 'Successfully opened dynamic library cudar t64_101.dI I'가 안 나오면 설치가 잘 못 된건가요?
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
오류
C:\Users\(사용자)\Desktop\ml-agents-release_17>mlagents-learn config/ppo/3DBall.yaml --env=C:\Users\(사용자)\Desktop\Project\Env\3DBall --run-id=mlagent_test1를 실행하면 Traceback (most recent call last): File "C:\Users\chosun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in runmodule_as_main return runcode(code, main_globals, None, File "C:\Users\chosun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in runcode exec(code, run_globals) File "C:\Users\chosun\PycharmProjects\pythonProject\venv\Scripts\mlagents-learn.exe\__main__.py", line 4, in <module> from mlagents.trainers.learn import main File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\mlagents\trainers\learn.py", line 2, in <module> from mlagents import torch_utils File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\mlagents\torch_utils\__init__.py", line 1, in <module> from mlagents.torch_utils.torch import torch as torch # noqa File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\mlagents\torch_utils\torch.py", line 6, in <module> from mlagents.trainers.settings import TorchSettings File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\mlagents\trainers\settings.py", line 625, in <module> class TrainerSettings(ExportableSettings): File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\mlagents\trainers\settings.py", line 648, in TrainerSettings cattr.register_structure_hook( File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\cattrs\converters.py", line 280, in register_structure_hook self._structure_func.register_cls_list([(cl, func)]) File "C:\Users\chosun\PycharmProjects\pythonProject\venv\lib\site-packages\cattrs\dispatch.py", line 57, in register_cls_list self._single_dispatch.register(cls, handler) File "C:\Users\chosun\AppData\Local\Programs\Python\Python39\lib\functools.py", line 855, in register raise TypeError(TypeError: Invalid first argument to register(). typing.Dict[mlagents.trainers.settings.RewardSignalType, mlagents.trainers.settings.RewardSignalSettings] is not a class.이렇게 오류가 뜨면서 실행이 안 돼요.. 정말 완전 초보라 해결을 못 하고 있는데 어떻게 하면 되나요..?
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
CPU로 학습해도 충분할까요?
안녕하세요. 학습 관련해서 질문 있습니다!집 데스크탑은 라데온이라 그런데 CPU로 학습만 해도 충분한 정도인가요?그리고 서버로는 CUDA를 쓸수 있으면 remote하게 학습하는 방법도 활용 가능할까요?유니티나 ml-agents는 처음 써봐서 질문 드립니다...!
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
경로 생성
안녕하세요 DDPG 부분까지 재밌게 수강했습니다.드론이 랜덤하게 생성되는 particle (goal)에 도달하는 것 말고 유니티 상에서 경로를 생성해 준 후 그 경로를 goal이라고 지정한 후에, 그 경로를 잘 따라가게끔 하는 것을 실습해보고자 합니다.혹시, 유니티에서 경로를 생성하게끔 해주는 툴을 알고 계신가요?강의 내용과는 거리가 있지만, 알고 계시다면 답변 부탁드립니다.
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
학습 관련
안녕하세요, 수업 따라가면서 코드 오류는 없었지만 내용에 질문이 생겨 글 남기게 되었습니다. 드론 agent 스크립트 중 Heuristic()에서 키보드 입력을 주었을 때 OnActionReceived()로 전달되어 드론을 움직이는 것으로 이해했는데, 학습 과정에서는 키보드 입력 없이 드론이 어떤 방법으로 스스로 움직이며 학습을 하는 것인지 궁금합니다. 감사합니다!
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
알고리즘 관련
안녕하세요, 알고리즘 관련해서 질문드리고 싶어 글 남깁니다. 해당 드론 예제를 DDPG가 아닌 PPO로 학습할 경우 대체로 성능이 낮아질까요? 내장된 알고리즘이 아닌 DDPG를 선택해 사용하신 이유가 궁금합니다.또한 드론과 goal 사이에 여러 장애물이 무작위로 배치될 경우에도 해당 알고리즘으로 학습이 무리없이 진행될지 질문드리고 싶습니다. 강화학습에 입문하면서 도움 많이 받고 있습니다. 감사합니다!
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
API를 통한 학습 관련
안녕하세요, mlagents-learn을 이용해 학습하고 적용하는 것까지는 무리 없이 수강하였는데, API를 이용해 학습하는 과정에서 질문이 생겨 문의 드립니다. (현재 아나콘다에서 실습 진행하고 있습니다.) 학습 알고리즘으로 PPO가 아닌 DQN을 사용하고자 한다면 강의와 같이 코드를 작성하여 저장하고, 저장한 경로에서 해당 파이썬 파일을 실행하면 학습이 진행되는 것이 맞을까요? 기타 다른 작업이 필요하지는 않은지 궁금합니다.예를 들어, mlagents-learn을 사용해 학습을 할 때에 사용했던 yaml 파일 등을 따로 생성할 필요는 없는지 등에 대해 여쭙고싶습니다. 감사합니다!
- 해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
ml-agents 관련 질문 있습니다.
안녕하세요, 저는 강화 학습 관련 관심이 생겨 여러 강화 학습 관련 프로젝트를 진행하고 있는 대학교 4학년 학생입니다. 인프런 강의를 기반으로 하여 프로젝트 진행에 도움을 많이 받고 있어 너무 감사합니다.다름이 아니라 ml-agents 관련 질문이 있어 글을 쓰게 되었습니다.강화 학습에서 reward shaping하는 기준 혹은 참고 논문이 있는 건지 궁금합니다.Training을 진행할 때 여러 번 경험한 내용으로 시간이 지나는데도 학습이 진행이 안된 경험이 있습니다. 이럴 때마다 작업 관리자로 CPU나 CUDA의 이용률을 보면 0프로 정도로 거의 움직이지 않는데 이를 병목 현상으로 예상하고 있습니다. 이를 해결하기 위해 아나콘다 프롬폼트에 키보드 interrupt를 하게 되면 멈췄던 학습이 실행 되어 여러 번 interrupt를 걸어 해결했습니다. 여러 다른 컴퓨터를 사용할 때마다 일어나는 공통적인 현상이라 혹시 제가 학습을 잘못 하고 있는 건지 아니면 이러한 현상에 대한 해결 방안이 따로 있는 건지 궁금합니다. 강화 학습 Training 방법을 찾아보면 제가 보기로는 두 가지 방법이 있었습니다. Unity 환경에서 하나의 프리팹 위에서 episode가 끝날 때마다 Agent나 environment의 구성을 랜덤으로 하여 진행하는 방식과 다른 environment를 여러개의 프리팹으로 하여 학습을 진행하는 방법이 있었습니다. 두 방법에 큰 차이가 있는 건지 궁금합니다.항상 이해하기 쉽게 강화 학습 관련 강의를 해주셔서 다시 한번 감사드립니다.
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
DQN 학습 및 저장 모델 불러오기 속도 문의
안녕하세요, 책을 먼저 사고, RL 커뮤니티 페이스북 페이지에서 인프런 강의 있다는 말 듣고 바로 사서 듣고 있는 중입니다. 강화학습 입문자에겐 빛과같은 존재이십니다. 감사합니다.GridWorld 환경 만들고, DQN으로 학습을 시킨뒤 저장된 모델 불러와서 학습된 결과를 볼 때 애들이 너무 빨리 움직입니다. 학습할때는 time_scale이 12이고 test_step으로 들어가면 time_scale이 1이 되어야 하는데, 반대인 느낌이 듭니다. 코드는 깃허브에서 다운 받은거에서 load_model 부분만 False에서 True로 바꾸고 train_model를 False로 바꿨습니다. 처음 학습할때도 처음 50000번 step을 돌고 나서 test 에 들어갈때 갑자기 확 빨라지는 걸 느꼈는데요, 이게 원래 그런건가 싶어서요, 어떻게 손을 봐야 할지 문의드립니다.
- 해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
완성된 프로젝트 관련하여 질문 있습니다.
안녕하세요 2학년 대학생입니다.유니티로는 여러 프로젝트를 해봐 어느정도는 알고 있는데 인공 지능 관련해서는 얕게 알고 있습니다. 강화학습에 관심이 많아 기술을 익혀 여러 프로젝트에 적용하고자 해당 강의를 구매하였는데 제 입장에서 많이 어렵더라구요.. 가상머신부터 환경세팅(파이썬 api, 학습, 개발환경 세팅 등등 ``) 계속해서 버전도 업데이트가 되고 구글 찾아가며 공부하는데 많이 어렵습니다.. 허나 포기할 생각은 없어서 파이썬부터 차근차근 다시 공부해가며 인공지능 관련해서도 공부를 하고 있는데 완성된 프로젝트를 받아 하나하나 천천히 찾아가며 공부를 해보고 싶습니다. 해서 깃허브에서 파일을 받았는데 휴리스틱 모드밖에 진행이 안되더라고요.. 드론 프로젝트, 카트레이싱 프로젝트 완성된 프로젝트를 보고싶습니다! 깃허브에 있는데 제가 무지해서 못 찾는 것인가 싶습니다! 방법을 알려주시면 감사하겠습니다. 부탁드립니다 ㅠㅜㅠ.. 큰 도움이 될 것 같습니다. ㅠㅜㅠ
- 해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
A2C 알고리즘을 드론 환경에 적용하려면
안녕하세요, 드론 환경에서 A2C 알고리즘을 적용해서 실험해보려고 합니다.환경에 맞게 적용을 하기 위해 state_size, action_size를 각각 9와 3으로 설정하고, 이 외에도 여러 부분을 수정하여 돌려 보려고 했는데 잘 안 되네요.get_action() 함수를 손보거나, preprocess를 하는 부분을 수정해주어야 할 것 같은데, 어떻게 해결해야 할지 잘 모르겠습니다.현재 상태에서는 다음과 같은 오류가 발생하고 있습니다.A2C.py의 코드는 아래와 같습니다.import numpy as np import datetime import platform import torch import torch.nn.functional as F from torch.utils.tensorboard import SummaryWriter from collections import deque from mlagents_envs.environment import UnityEnvironment, ActionTuple from mlagents_envs.side_channel.engine_configuration_channel\ import EngineConfigurationChannel # A2C를 위한 파라미터 값 세팅 state_size = 9 action_size = 3 load_model = False train_mode = True discount_factor = 0.9 learning_rate = 0.00025 run_step = 100000 if train_mode else 0 test_step = 10000 print_interval = 10 save_interval = 100 # VISUAL_OBS = 0 # GOAL_OBS = 1 # VECTOR_OBS = 2 # OBS = VECTOR_OBS # 유니티 환경 경로 game = "Drone" os_name = platform.system() if os_name == 'Windows': env_name = f"C:/Users/user/anaconda3/envs/mlagents/Drone_0427/Drone_1002_3.exe" elif os_name == 'Darwin': env_name = f"../envs/{game}_{os_name}" # 모델 저장 및 불러오기 경로 date_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S") save_path = f"./saved_models/{game}/A2C/{date_time}" load_path = f"./saved_models/{game}/A2C/20210709235643" # 연산 장치 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print("CUDA is available" if torch.cuda.is_available() else "CPU is available") # A2C 클래스 -> Actor Network / Critic Network 정의 class A2C(torch.nn.Module): def __init__(self, **kwargs): super(A2C, self).__init__(**kwargs) self.d1 = torch.nn.Linear(state_size, 128) self.d2 = torch.nn.Linear(128, 128) self.pi = torch.nn.Linear(128, action_size) self.v = torch.nn.Linear(128, 1) def forward(self, x): x = F.relu(self.d1(x)) x = F.relu(self.d2(x)) return F.softmax(self.pi(x), dim=1), self.v(x) # A2CAgent 클래스 -> A2C 알고리즘을 위한 다양한 함수 정의 class A2CAgent(): def __init__(self): self.a2c = A2C().to(device) self.optimizer = torch.optim.Adam(self.a2c.parameters(), lr=learning_rate) self.writer = SummaryWriter(save_path) if load_model == True: print(f"... Load Model from {load_path}/ckpt ...") checkpoint = torch.load(load_path+'/ckpt', map_location=device) self.a2c.load_state_dict(checkpoint["network"]) self.optimizer.load_state_dict(checkpoint["optimizer"]) # 정책을 통해 행동 결정 def get_action(self, state, training=True): # 네트워크 모드 설정 self.a2c.train(training) #네트워크 연산에 따라 행동 결정 pi, _ = self.a2c(torch.FloatTensor(state).to(device)) action = torch.multinomial(pi, num_samples=1).cpu().numpy() return action def train_model(self, state, action, reward, next_state, done): state, action, reward, next_state, done = map(lambda x: torch.FloatTensor(x).to(device), [state, action, reward, next_state, done]) pi, value = self.a2c(state) # Value network with torch.no_grad(): _, next_value = self.a2c(next_state) target_value = reward + (1-done) * discount_factor * next_value critic_loss = F.mse_loss(target_value, value) #Policy network eye = torch.eye(action_size).to(device) one_hot_action = eye[action.view(-1).long()] advantage = (target_value - value).detach() actor_loss = -(torch.log((one_hot_action * pi).sum(1))*advantage).mean() total_loss = critic_loss + actor_loss self.optimizer.zero_grad() total_loss.backward() self.optimizer.step() return actor_loss.item(), critic_loss.item() # 네트워크 모델 저장 def save_model(self): print(f"... Save Model to {save_path}/ckpt ...") torch.save({ "network" : self.a2c.state_dict(), "optimizer" : self.optimizer.state_dict(), }, save_path+'/ckpt') # 학습 기록 def write_summray(self, score, actor_loss, critic_loss, step): self.writer.add_scalar("run/score", score, step) self.writer.add_scalar("model/actor_loss", actor_loss, step) self.writer.add_scalar("model/critic_loss", critic_loss, step) # Main 함수 -> 전체적으로 A2C 알고리즘을 진행 if __name__ == '__main__': # 유니티 환경 경로 설정 (file_name) engine_configuration_channel = EngineConfigurationChannel() env = UnityEnvironment(file_name=env_name, side_channels=[engine_configuration_channel]) env.reset() # 유니티 브레인 설정 behavior_name = list(env.behavior_specs.keys())[0] spec = env.behavior_specs[behavior_name] engine_configuration_channel.set_configuration_parameters(time_scale=12.0) dec, term = env.get_steps(behavior_name) # A2C 클래스를 agent로 정의 agent = A2CAgent() actor_losses, critic_losses, scores, episode, score = [], [], [], 0, 0 for step in range(run_step + test_step): if step == run_step: if train_mode: agent.save_model() print("TEST START") train_mode = False engine_configuration_channel.set_configuration_parameters(time_scale=1.0) #preprocess = lambda obs, goal: np.concatenate((obs*goal[0][0], obs*goal[0][1]), axis=-1) #state = preprocess(dec.obs[OBS]) #state = preprocess(dec.obs[OBS],dec.obs[GOAL_OBS]) state = dec.obs[0] action = agent.get_action(state, train_mode) action_tuple = ActionTuple() action_tuple.add_continuous(action) env.set_actions(behavior_name, action_tuple) env.step() dec, term = env.get_steps(behavior_name) done = len(term.agent_id) > 0 reward = term.reward if done else dec.reward next_state = term.obs[0] if done else dec.obs[0] score += reward[0] if train_mode: agent.append_sample(state[0], action[0], reward, next_state[0], [done]) # 학습 수행 actor_loss, critic_loss = agent.train_model() actor_losses.append(actor_loss) critic_losses.append(critic_loss) if done: episode += 1 scores.append(score) score = 0 # 게임 진행 상황 출력 및 텐서 보드에 보상과 손실함수 값 기록 if episode % print_interval == 0: mean_score = np.mean(scores) mean_actor_loss = np.mean(actor_losses) mean_critic_loss = np.mean(critic_losses) agent.write_summray(mean_score, mean_actor_loss, mean_critic_loss, step) actor_losses, critic_losses, scores = [], [], [] print(f"{episode} Episode / Step: {step} / Score: {mean_score:.2f} / " +\ f"Actor loss: {mean_actor_loss:.2f} / Critic loss: {mean_critic_loss:.4f}") # 네트워크 모델 저장 if train_mode and episode % save_interval == 0: agent.save_model() env.close()답변 주시면 감사하겠습니다!
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
DroneSetting 컴포넌트가 안보여요~
안녕하세요~Drone 환경 만들때 DroneSetting.cs 스크립트 힘들게 작성하였는데 Area -> Add Component 에서 Drone Setting 컴포넌트가 보이지 않습니다. 확인 부탁드리겠습니다. DroneSetting.cs 코드는 아래와 같습니다. using System.Collections;using System.Collections.Generic;using UnityEngine;public class DroneSetting : MonoBehaviour{ public GameObject DroneAgent; public GameObject Goal; private Vector3 areaInitPos; private Vector3 droneInitPos; private Quaternion droneInitRot; private Transform AreaTrans; private Transform DroneTrans; private Transform GoalTrans; private Rigidbody DroneAgent_Rigidbody; void Start() { AreaTrans = gameObject.transform; DroneTrans = DroneAgent.transform; GoalTrans = Goal.transform; areaInitPos = AreaTrans.position; droneInitPos = DroneTrans.position; droneInitRot = DroneTrans.rotation; DroneAgent_Rigidbody = DroneAgent.GetComponent<Rigidbody>(); } public void AreaSetting() { DroneAgent_Rigidbody.velocity = Vector3.zero; DroneAgent_Rigidbody.angularVelocity = Vector3.zero; DroneTrans.position = droneInitPos; DroneTrans.rotation = droneInitRot; GoalTrans.position = areaInitPos + new Vector3(Random.Range(-5f, 5f), Random.Range(-5f, 5f), Random.Range(-5f, 5f)); }}
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
강의 내용 실습하다가 질문드립니다.
안녕하세요! 강의 내용을 똑같이 따라서 혼자 해봤는데, 기존 3DBall Agent TFModel로 실행시켰을 때와 ppo로 학습시킨후 얻은 agent모델로 변경해서 실행시켰을 때, 차이가 없는데, 기존에 설정되어 있는 3DBall(NN Model)도 ppo로 학습된 모델인건가요?
- 미해결유니티 머신러닝 에이전트 완전정복 (기초편)
드론이 움직이긴 하는데 일정 범위에서 벗어나질 못합니다.
안녕하세요! 실습 진행하면서 오류가 생겨서 질문드립니다.코드상의 오류는 전혀 없는데 스크립트 작성 후 게임 플레이를 누르면 드론이 방향키는 잘 먹는데 움직이다 얼마안가 다시 처음 지점으로 돌아옵니다. 움직일 수 있는 범위가 엄청 좁습니다. 코드는 강의에 나온대로 그대로 잘 작성하였습니다.마지막 세팅 역시 이상있는 부분은 없는걸로 나옵니다.어디가 문제인지 잘 모르겠는데 혹시 해결책이 있을까요?