묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
카트레이싱 환경관련 문의
안녕하세요, 수업은 다 듣고 실습부분만 조금씩 다시 따라가고 있는데요,카트레이싱에서 환경 구축을 다 하고, KartAgent 코드도 깃허브에 있는거 그대로 C# 코드 옮기고, AcadeKart 코드도 수정을 다 했는데, 이상하게 카트가 1번 웨이포인트 지나고 리셋이 됩니다. 파이토치와 유니티 책에는 OnEpisode 함수에 for문이 있는데, 넣고 빼고는 상관이 없더라구요, 웨이포인트를 이어가지 못하거나 중간에 충돌이라고 판단하거나 기타 리셋 조건이 문제인것 같은데, 어딜 봐야 할지 조언을 주실 수 있으신가요?
-
미해결모두를 위한 딥러닝 - 기본적인 머신러닝과 딥러닝 강좌
강의자료 ppt
안녕하세요 처음 배워보려고 해서 찾아찾아 오게됐습니다 강의 너무 좋은데 강의하시는 ppt가 따로 제공이 되는건지 궁금해서요~혹시 제공된다고 제가 어디서 찾을 수 있을까요??
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
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?)유니티에 다음과 같은 오류가 뜨네요.
-
미해결프로그래머를 위한 강화학습(저자 직강)
PPO에서 min()을 사용하는 이유가 궁금합니다
설명해주신대로면,min()을 사용하지 않아도 이미 clip()을 통해서 r()이 상항과 하한을 넘기면 a 혹은 b로 고정되고, 그 범위 안에 들어가면 r()이 그대로 나오는 것으로 생각됩니다. min()이 여기서 어떠한 역할을 하는지 궁금합니다.=> 범위 안에 있을때 r(original) 과 r(clipped)가 달라지는 경우가 있나요?
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
여러 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를 여러개의 프리팹으로 하여 학습을 진행하는 방법이 있었습니다. 두 방법에 큰 차이가 있는 건지 궁금합니다.항상 이해하기 쉽게 강화 학습 관련 강의를 해주셔서 다시 한번 감사드립니다.
-
미해결모두를 위한 딥러닝 - 기본적인 머신러닝과 딥러닝 강좌
tf.placeholder 에러
placeholder란 method가 없다고 하는데 업그레이드하면서 없어진건가요? 없어졌다면 뭐로 대체해서 사용하면 될까요?
-
미해결프로그래머를 위한 강화학습(저자 직강)
cartpole_reinforce.ipynb 에러
코랩에서 cartpole_reinforce.ipynb 실행시킬때 아래와 같은 에러 발생합니다.ValueError: Layer "my_model_1" expects 3 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 1, 4) dtype=float32>]에러나는 소스 위치는 아래 화면에서 "y_pred = self(states, training=True)" 부분에서 에러가 발생됩니다. class MyModel(tf.keras.Model): def train_step(self, data): in_datas, out_actions = data states, action_matrix, rewards = in_datas[0], in_datas[1], in_datas[2] with tf.GradientTape() as tape: y_pred = self(states, training=True) action_probs = K.sum(action_matrix*y_pred, axis=-1) loss = -K.log(action_probs)*rewards trainable_vars = self.trainable_variables gradients = tape.gradient(loss, trainable_vars) self.optimizer.apply_gradients(zip(gradients, trainable_vars)) tensorflow 버젼 : 2.9.2 이며, 모델에 3개의 값을 주어야 하는데, 1개만 받아서 그런것 같습니다.해결 방법 알려 주시기 바랍니다.감사합니다.
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
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()답변 주시면 감사하겠습니다!