목록분류 전체보기 (66)
모두야
Linux 우분투 18.04에 nvidia 그래픽 카드를 설치하여 사용하려고 한다. nvidia-smi 기존 그래픽 카드의 정보를 알기 위해서 위의 코드를 실행하게 되면 정보가 떠야하는데 아래와 같은 오류만 계속 난다. nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 이 경우 nvidia GPU 드라이버에 문제가 생겨 발생하는 오류이다. 본인의 경우 nvidia 설치 시 버전 충돌에 문제가 있었던 것으로 판단한다. 오류를 해결하기 위해 설치된 모든 nvidia 드라이버를 삭제 후..
설치된 cuda랑 pytorch 버전이 맞지 않아 생기는 문제였다. print(torch.cuda.is_available()) >> Fasle 기존 cuda 버전은 11.2 였으므로 알맞은 pytorch 버전을 설치해줘야했다. pytorch version : 1.7.1 cuda version : 11.2 pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Kobert에 알맞은 torch 버전은 1.10.0+cu111 이였다. 참고 자료
기존 Cuda 삭제 프로그램 추가/제거 들어가서 아래 NVIDIA에 관련된 프로그램을 모두 지운다. Cuda 버전 확인 갖고 있는 GPU 성능에 따라 알맞은 버전을 설치해야한다. 기존에 있던 버전이 맞지 않아 설치를 모두 했음에도 불구하고 gpu를 활용하지 못한 경험이 있다. 차근히 버전을 맞춰 설치할 필요성을 느꼈다. 1. 내 GPU 확인하기 나는 GeForce RTX 3060 을 가지고 있다. 아래 링크에 들어가서 확인해보니 나는 compute capability 8.6이 적합하다고 한다. https://en.wikipedia.org/wiki/CUDA#Version_features_and_specifications 2. 알맞은 CUDA 버전 확인하기 위의 링크에서 GPU에 맞는 CUDA SDK 버전을..
seq2seq의 문제점/ 해결 Encoder가 시계열 데이터를 인코딩 할 때, Encoder의 출력은 '고정 길이의 벡터' 이다. 입력 문장 길이에 관계없이, 항상 같은 길이의 벡터로 표현해야한다. -> 아무리 긴 문장이여도 고정 길이의 벡터로 변환 해야한다. ☞ Encoder 개선 Encoder 출력 길이를 입력 문장 길이에 따라 바꿔주는 것이 좋다. 시각별 LSTM 계층의 은닉 상태 벡터를 모두 이용하여 입력된 단어와 같은 수의 벡터를 얻는다. => 시각별 LSTM 계층의 은닉 상태에는 어떤 정보가 담겨 있을까? 직전에 입력된 단어의 정보가 많이 포함되어 있다. 은닉상태의 모든 시각만큼 꺼낸다 ☞ Decoder 개선 1. 맥락벡터 c [ 입력과 출력의 여러 단어 중 어떤 단어끼리 서로 관련이 있는가 ..
seq2seq 시계열 데이터 : 언어,음성,동영상 시계열↔시계열 데이터 변환 : 기계 번역→음성 인식 Encoder-Decoder 모델이다. Encoder : 마지막 은닉상태 h에 입력 문장(출발어)를 번역하는 데 필요한 정보가 인코딩된다. : LSTM의 은닉 상태 h 는 고정 길이 벡터이다. Decoder : LSTM 계층이 벡터 h를 입력 받는다. seq2seq는 LSTM 2개가 은닉 상태를 통해 이어져있다. seq2seq 구현하기 단어 단위가 아닌, 문자 단위의 패턴을 학습한다. 57+5 가 입력 되면, ['5','7','+','5']라는 리스트로 처리된다. (주의) 문자 수가 다 다르다. = 샘플마다 데이터의 시간 방향 크기가 다르다. = 가변 길이 시계열 데이터를 다룬다. ==> 미니배치 처리를..
언어 모델을 사용하여 '문장 생성' 수행 1. 말뭉치로 학습된 언어 모델을 이용하여 새로운 문장 생성 2. 개선된 언어 모델을 이용하여 더 자연스러운 문장 생성 seq2seq 구조 공부하기 : 한 시계열 데이터를 다른 시계열 데이터로 변환한다. : RNN 두 개를 연결한다. RNN을 사용한 문장 생성 순서 언어 모델에게 문장을 생성 시키는 순서 - "you say goodbye and I say hello." 라는 말뭉치로 학습한 언어 모델이다. 학습 된 언어 모델에 "I"라는 단어를 입력으로 준다. 언어 모델은 [그림 7-2]와 같은 확률분포를 출력한다. 다음 단어를 새로 생성한다. (1) [결정적 선택] 확률이 가장 높은 단어를 선택한다. (2) [확률적 선택] 단어의 확률에 맞게 선택한다. 확률 분..
언어 모델 구현하기 # coding: utf-8 import sys sys.path.append('..') from common.time_layers import * from common.base_model import BaseModel class Rnnlm(BaseModel): def __init__(self, vocab_size=10000, wordvec_size=100, hidden_size=100): V, D, H = vocab_size, wordvec_size, hidden_size rn = np.random.randn # 가중치 초기화 embed_W = (rn(V, D) / 100).astype('f') lstm_Wx = (rn(D, 4 * H) / np.sqrt(D)).astype('f') ..
RNN(기울기 폭발/ 기울기 손실) 에 이어서---- 기울기 폭발 원인 : 1보다 큰 Wh를 계속 곱해서 오버플로를 일으키며 NaN 값 발생된다. 해결 : 기울기 클리핑 기울기 손실 원인 : tanh의 계속된 미분, 1보다 작은 Wh를 계속 곱해줘서 기울기가 매우 작아진다. 해결 : 게이트가 추가 된 RNN - LSTM [ RNN 문제점은 어떻게 해결할 수 있을까?] 1) 기울기 폭발 - 기울기 클리핑으로 해결 threshold : 문턱값 g : 신경망에서 사용되는 모든 매개변수의 기울기를 하나로 모은 것 ||g|| (기울기의 L2노름) > 문턱값 초과하면 기울기를 수정하자. # 기울기 클리핑 구현 import numpy as np dW1 = np.random.rand(3, 3) * 10 dW2 = np..
[ RNN 복습 / 문제점 ] RNN :순환 경로를 포함하여 과거의 정보 기억 RNN의 문제점 ▷ 시계열 데이터에서 시간적으로 멀리 떨어졌을 경우, 잘 기억하지 못한다. (장기 의존 관계 학습 X) ▷ (해결법) 게이트가 추가된 RNN : LSTM을 사용한다. ▷ (이유) BPTT 에서 기울기 소실 / 기울기 폭발이 일어난다. 기울기 소실 / 폭발 원인 Tom was watching TV in his room. Mary came into the room. Mary said hi to ? (Tom) Tom 이 방에서 TV를 보고 있음 & 그 방에 Mary가 들어옴 이라는 정보를 RNN 계층의 은닉 상태에 인코딩 보관해둬야함 과거 방향으로 의미 있는 기울기 전달 = 의미 있는 정보를 과거로 전달 = 장기 의..
RNN 구현하기 한 단계의 작업을 수행하는 계층을 RNN 계층, T개 단계의 작업을 한번에 처리하는 계층을 Time RNN 계층이라 한다. # RNN 구현하기 class RNN: # 클래스 초기화 def __init__(self, Wx, Wh, b): # 가중치2개, 편향1개 self.params = [Wx, Wh, b] self.grads = [np.zeros_like(Wx), np.zeros_like(Wh), np.zeros_like(b)] #기울기 초기화 self.cache = None #역전파시 중간 데이터 담을 cache 초기화 #순전파 - 입력2개 def forward(self, x, h_prev): #아래입력x, 왼쪽입력h_prev Wx, Wh, b = self.params t = np.do..