전체 글 160

Keras에서 재현가능한 결과를 얻기(Reproducibility)

keras를 이용해 LSTM 모델을 만들던 중에 문제가 하나 발생했다. 같은 코드로 실행을 했는데, 같은 결과값이 나오지 않는다. 시행할 때마다 다른 loss와 val_loss들이 나오기 때문에, 모델이 변경되었을 때 개선되었는지에 대한 판단이 어렵다. 원인은 크게 3가지이다. 1. GPU모델을 사용했다. -> CPU를 사용하면 됨 2. Multi-Thread를 사용했다. -> Single-Thread로 변경한다 3. Random Seed. -> Seed를 지정해준다. 각 원인에 대한 자세한 설명을 알고 싶다면, 다음 유튜브 영상을 참고하자. https://www.youtube.com/watch?v=Ys8ofBeR2kA 나같은 경우에는 이유를 알아보니, 멀티 쓰레드를 사용한 것 + Random_seed의..

random 모듈

1. Random random 모듈은 임의의 값을 생성할 때 주로 사용함. 1) random.seed ( N ) -> 랜덤 숫자 생성의 초기화 작업. 2) random.random( ) -> 0.0 가우스 분포의 난수를 반환 5) random.randrange(start, stop, step) -> range( ) 의 아이템 중에서 임의의 값을 선택하여 반환 6) random.randint(a, b) -> a 입력받은 sequence를 섞음 import random random.random() #0.26483659 random.uniform(3,4) #3.328149852 for i in range(3): random.gauss(1,1.0) #1.347587 , 1,797528492 , 0.3846293..

Python/기초 2020.03.18

Time / Datetime (날짜, 시간 모듈)

1. Time 시간 연산을 위한 모듈. import time # 1. 1970년 1월 1일 00:00:00을 기준으로 경과한 초를 반환. time.time() #2. 현재 시간 구하기 time.localtime(time.time) """ 결과 time.struct_time(tm_year=2020, tm_mon=3, tm_mday=17, tm_hour=23, tm_min=30, tm_sec=11, tm_wday=2, tm_yday=77, tm_isdst=0) """ #3. 날짜 형식으로 바꾸기 time.strftime('%Y-%m-%d', time.localtime(time.time())) #'2020-03-17' time.strftime('%c', time.localtime(time.time())) #'..

Python/기초 2020.03.18

pd.concat / df.append / pd.merge

1. pd.concat( ) pandas.concat (objs, axis=0, join='outer', ignore_index: bool = False, keys=None, levels=None, names=None, verify_integrity: bool = False, sort: bool = False, copy: bool = True) axis = 0 (default) 0 = 세로 결합 1 = 가로 결합 join = outer (default) outer = 합집합으로 결합 inner = 교집합 결합 ignore_index = False (default bool) False면 기존의 인덱스를 그대로 유지해서 결합 True면 새로운 정수형 인덱스를 생성 keys = None (default seq..

Python/Pandas 2020.03.13

14. Pandas - 다중인덱싱(Multi Index)

1. 다중인덱싱 생성 인덱스가 2개일 수도 있을까? 인덱스가 2개인 경우, 다중 인덱싱이 가능하다. 인덱스가 사람이름, 교과목명 2가지인 경우, 다음과 같이 만들 수 있다. 1) DataFrame에서는 생성자에 2개의 인덱스 배열 리스트를 전달한다. 2) Series에서는 튜플을 키 딕셔너리로 전달함. 3) index 와 data가 따로 인경우, Series를 만든 후 reindex한다. 다음과 같이 인덱스를 MultiIndex로 만들어주고, 리인덱싱을 하면 다음과 같이 만들어 지게 된다. 2번째 인덱스가 English인 데이터에 접근하려면 아래와 같이 사용하면 된다. 4) 다중인덱스의 DataFrame만들기 인덱스와 칼럼에 각각 names를 만들어 주면 된다. 2. MultiIndex 메소드 1) un..

Python/Pandas 2020.03.12

13. Pandas - 결측값(Nan, None)

결측값 (None, NaN) 1) None (Numpy) Numpy에서는 None 값을 사용하지 말자. None은 파이썬 객체이고, Numpy연산이 불가능하다. Pandas에서 사용이 가능하기는 하지만, 연산속도가 느려지고 Numpy메소드 사용이 불가능하므로 사용하지 않는 것을 권장한다. 2) NaN (Numpy) NaN이 포함된 산술 연산의 결과는 무조건 모두 NaN이 된다. 3) None, NaN (Pandas) Pandas에서 None은 자동으로 nan으로 변경한다. Null 값 탐지 : isnull( ) / notnull( ) isnull에서는 null값이 있으면 True, 없으면 False. nan과 None 모두 null값으로 처리함 Null 값 제거하기 : dropna( ) , fillna(..

Python/Pandas 2020.03.04

12. Pandas 정리 - 객체 (Series, DataFrame), 인덱싱

1. Series # pd.Series(data, index = [ ]) Series는 데이터의 1차원 배열이라고 할 수 있다. numpy배열이며, 값은 values로 인덱스는 index로 접근할 수 있다. 이 때, values는 Numpy배열이다. 인덱스를 이용하여, 특정 값에 접근할 수 있다. Numpy와는 다르게 인덱스 값을 설정할 수 있다. (np는 정수열 인덱스만 가능) 인접하지 않는 정수형 인덱스를 설정할 수도 있다. 인덱스를 키라고 생각한다면, Series배열은 딕셔너리형 객체라고 생각해도 무방하다. 2. DataFrame # pd.DataFrame(ndarray, index = [ ], column = [ ]) https://pandas.pydata.org/pandas-docs/stable..

Python/Pandas 2020.02.26

11-1. Numpy 재정리 - 연산, 인덱싱, 정렬

1. 연산 (기본 집계 연산) 1) 기본적으로 python 연산보다 numpy 내장 메소드를 사용하는 것이 빠르다. ndarray일 경우, A.min() 으로 해주면 알아서 numpy연산이 됨 2) 다차원일 경우에도 동일하다. (행과 열이 생길뿐) 집계 함수 총 정리 2. 연산 (브로드캐스팅) 1) 브로드캐스팅에는 다음과 같은 규칙이 있다. 규칙 1 : 두 배열의 차원이 다르면, 작은 차원의 배열을 1로 간주하여 같은 차원으로 만든다. 규칙 2 : 두 배열의 차원이 다르고, 행열도 일치하지 않는다면 행 또는 열 중 1인 값이 늘어난다. 규칙 3 : 두 배열의 차원이 다르고, 행열도 다르며, 1도 없으면 오류가 발생함. Ex 1) 규칙 1처럼 차원이 다르기 때문에, 1차원 배열을 (1,3)인 2차원 배열로..

Python/Numpy 2020.02.18

11. Numpy 재정리 - 생성, 인덱싱, 슬라이싱, 재구조화

1. 배열 생성 1) 그냥 np.array()에 넣어준다. 2) zeros, ones, full, eye 3) arange, linspace 4) random.random / random.normal / random.randint 2. 인덱싱 1) [행, 열]로 인덱싱하면 됨. 3. 슬라이싱 기본적으로 x[start : stop : step] 1) 1차원 슬라이싱 2) 다차원 슬라이싱 3) 슬라이싱의 특징 일부를 슬라이싱 한 뒤, 값을 변경하면 원본 데이터의 값이 변경된다. 원본이 변경되지 않게 값을 수정하고 싶다면, 하드카피를 이용해서 수정해야 한다. copy( ) 4. 배열의 재구조화, 연결, 분할 1) 재구조화 reshape( ) 1차원배열을 다차원으로, 다차원배열을 1차원으로 쉽게 바꿀 수 있다...

Python/Numpy 2020.02.13

10. Jupyter Notebook 단축키

1. tab (자동 완성) 파이썬 객체와 연결된 속성과 메소드를 검색해서 다음과 같이 결과 값을 보여준다. import에서도 가능하다. 2. cell관련 명령어 shift + Enter : 실행 후, 아래 cell로 이동 alt + Enter : 실행 후, 아래 cell을 추가 H : 단축키설정 보기 A : 위에 cell 추가 B : 아래에 cell 추가 X : Cut C : Copy V : Paste Z : Undo F : Find & Replace DD - 셀 삭제 3. %명령어 (매직 명령어) 1) %run : 외부의 py파일을 실행가능 (ipynb파일은 실행이 불가능함) 2) %timeit : 실행 시간을 측정해줌. (한줄만) 여러줄을 측정하고 싶으면 %%timeit을 사용하면 된다. timeit..