discuss.pytorch.org/t/concatenate-layer-output-with-additional-input-data/20462

 

Concatenate layer output with additional input data

I want to build a CNN model that takes additional input data besides the image at a certain layer. To do that, I plan to use a standard CNN model, take one of its last FC layers, concatenate it with the additional input data and add FC layers processing bo

discuss.pytorch.org

사실 간단하지만 궁금했던부분이다.

torch 에서는 이런식으로 layer 를 추가해주고 forward 부분에 

x = torch.cat((x1, x2), dim=1

이런식으로 하는게 특징이다.

 

 

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.cnn = models.inception_v3(pretrained=False, aux_logits=False)
        self.cnn.fc = nn.Linear(
            self.cnn.fc.in_features, 20)
        
        self.fc1 = nn.Linear(20 + 10, 60)
        self.fc2 = nn.Linear(60, 5)
        
    def forward(self, image, data):
        x1 = self.cnn(image)
        x2 = data
        
        x = torch.cat((x1, x2), dim=1)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

 

'Machine.Learning > torch' 카테고리의 다른 글

pytorch hook 걸기  (0) 2023.04.10

 

1. www.nvidia.com/

에서 os 등 선택 후 드라이버 검색 > 결과 460.32 /  455.45

460.32 = cuda 11.2

455.45 = cuda 11.1 을 포함하고있음

455.45 를 선택하여 설치 함

일단 여기까지 성공

 

1-2. cuda tool kiㅅ  설치  nvidia 드라이버와 맞는 cuda 를 설치

developer.nvidia.com/cuda-downloads?target_os=Linux

 

CUDA Toolkit 11.2 Update 1 Downloads

Select Target Platform Click on the green buttons that describe your target platform. Only supported platforms will be shown. By downloading and using the software, you agree to fully comply with the terms and conditions of the CUDA EULA. Operating System

developer.nvidia.com

아래 명령어등을 이용하여 환경변수등록 필요!

echo 'export PATH=$PATH:/usr/local/cuda-11.2/bin' >> ~/.bash_profile
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64' >> ~/.bash_profile
echo 'export CUDADIR=/usr/local/cuda-11.2/' >> ~/.bash_profile

 

2. cudnn 설치

developer.nvidia.com/rdp/cudnn-download

마찬가지로 위링크 통해 cudnn 설치 

 

일단 이렇게 많이 뜨는데, Runtime library 로 설치  함//

 

3. 가상환경설정 virtualenv + pip 조합으로 설정

pycharm 을통해 default viertualenv 를 만들고

source /home/sangil/PycharmProjects/PatchNet/t171/bin/activate

을통해 activate

 

4.tf2 , torch 등을 설치

 

pip install 쭉 복사해다가 붙여주면됩니다.

설치완료후 

 

아래 코드를 통해  동작확인 하고 끝!

In [1]: import torch

In [2]: torch.cuda.current_device()
Out[2]: 0

In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0>

In [4]: torch.cuda.device_count()
Out[4]: 1

In [5]: torch.cuda.get_device_name(0)
Out[5]: 'GeForce GTX 950M'

In [6]: torch.cuda.is_available()
Out[6]: True

 

4-2. <Tensorflow2 설치>

tf2 를 설치 해보자

tf2 설치는 간소화되어있다. 

pip install tensorflow 

오마이갓 여기 리스트 에 확인된바로는

tensorflow-2.1.0 2.7, 3.5-3.7 GCC 7.3.1 Bazel 0.27.1 7.6 10.1

이게 마지막 버전이라 TF 설치하기위해선 다운그레이드 해야할판이다 ㅎㅎ

tf2 를사용하려면 1번부터 다시 해서 10.1 cuda 에 맞춰서 설치하면 된다.

www.tensorflow.org/install/source#gpu

 

 

소스에서 빌드  |  TensorFlow

소스에서 TensorFlow pip 패키지를 빌드하고 Ubuntu Linux 및 macOS에 설치합니다. 명령어는 다른 시스템에도 적용될 수 있지만, Ubuntu 및 macOS용으로만 테스트되었으며 지원됩니다. 참고: 잘 테스트되고

www.tensorflow.org

 

*solutions for 4-2 

결론적으로 rtx3080 이 cuda 11.1 부터 호환되므로 위의 버전지원등의이유로 tf2 를 깔수 없지만 

이글을 참고해보면

stackoverflow.com/questions/63978039/is-cuda-11-with-rtx-3080-support-tensorflow-and-keras

1. TF 공식홈페이지엔 직접 cuda 버전을 맞추어서 tf 를 빌드에서 쓰라고한다.

 

2. 혹은 docker 를사용하여 빌드하면 된다고한다.

hub.docker.com/r/tensorflow/tensorflow/tags/?page=1&ordering=last_updated&name=2.4

 

Docker Hub

 

hub.docker.com

pip install tensorflow==2.4.1  버전으로 tf 및 Keras 설치 및 실행  성공 , 다만

cuda 버전이 TF 와 정확히 맞지 않아 memory 관련 warning 이 많이 뜬다.

 

그게 껄끄럽다면 아래 개발자버전을 이용하여 설치하면 3080 과 잘 호환되는 것을 알 수 있다.

혹은 tf : pip install tf-nightly==2.5.0.dev20210110

을이용하여 tf-nightly 를 이용해도 되는데 nightly 자체가 버그가 많은것으로 알고 있다.

 

RL 에 대해서 여러가지 리뷰를 진행 하였고, 정리하였다.

 

일단 RL 쪽에 계속 발전하고있고, 기존방식의 문제점들을 보완하려는 노력을 하고있다.

RL 같은경우 아래와 같은 한계점들이 존재한다고한다.

1. State 가 무수히 많을 경우

2. 수렴성의 보장

3. 높은 분산값 

 

이런것들을 보완하기위해서 새로운방법들이 나오고있고, 현재 진행형 인 듯 하다.

강화학습을 나중에 더 깊게 파고들 수도있지만. 정확히말해서 그렇게 까지 잘 될것 인지에 대한 확신 이 없다.

적절한 보상을 주고 알아서 판단하게 만들려고하는게 강화학습인데 어디까지 더 생각을 해야될까? 라는 의문점을..

 

아무튼 키워드위주로 정리하겠다.

DQN - state 가 무수히 많을 경우 Q-Value 를 state마다 정의하지않고,  네트워크를 만들어서해결

 

Policy gradient -  DQN 과 이어서 생각해보았을때 seta 가 일종의 DQN 의 parameter이라 생각해보자, 기존에는 policy 가 Q_seta 에 의해 결정되었다면,  policy 자체를 seta 에 대한 직접적인 output 이라 생각한다.

그 다음 Q_pi 의 값이 늘어나는쪽으로 (gradient) 가게되면 전체적으로 value function 이 높아지는 쪽으로 수렴한다.

cost function 은 대체로 보상 들의 합의 기대값으로 놓고 그것을 최대로 하는 seta 를 찾는게 목표이다.

 

이 식으로 인해 grad(log_pi_seta(타우=경로) ) 의 기대값을 계산하면 costfunction 의 그라디언트를 구할 수 있는데,

이 값(grad(log_pi_seta(타우=경로) )은 기대값이기 때문에 MC - method 등으로 인해 경험적으로 구할 수 있다.

하는이유 : DQN 에 비해 좋은 수렴성

 

Baseline - 강화학습에서 미리 계산된 Value Function 을 사용 할 수도 있다.

A = Q - V 이렇게 놓고 A 를  수렴 시키기도한다. (분산이줄음)

 

 

Actor-Critic

위의 policy gradient 의 경우에는 MC 로 진행 햇을경우 높은 분산값을 갖는데 그값을 줄이기위해서

 

 

ACtor Q 를 수렴

Critic V 를 수렴 ( Q 의 action 선택을 비평)

Critic은 action value function을 approximate하는 w를 update하고

이때 Ciritic 도 network 를 사용하는 이유는 모든 경우를 trial 하지 않고 적은 sample 로도 기대값의 합을 알수 있게 되는 효과가 있다.

Actor는 policy를 approximate하는 seta를 update 따라서 w와 seta, 두 개의 weight parameter 를 갖는 강화학습 방법 

 

 

DDPG

NAtural Policy

TRPO PPO 등이 더있는데. 나중에 정리하겠다.

'Machine.Learning > reinforcement' 카테고리의 다른 글

Blackjack with DP vs Blackjack with MC  (0) 2020.12.08
Cliff exploration, Sarsa vs Q-Learning  (0) 2020.12.06
6장 TD  (0) 2020.11.30
5. Monte Carlo method (MC method)  (0) 2020.11.30
4. 4장 DP (Policy Evaluation and improvement)  (0) 2020.11.30

+ Recent posts