일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ubuntu
- BAEKJOON
- Tornado
- spring
- OrientDB
- 프레임워크
- AWS
- 저지
- 설치
- Python
- 배열
- API
- 파이썬
- 이클립스
- 연결
- 연동
- 알고리즘
- 백준
- r script
- online
- Java
- mariadb
- 오픈한글
- Judge
- r
- 자료형
- 토네이도
- Framework
- MongoDB
- 자바스크립트
- Today
- Total
목록파이썬/딥러닝 구현 (20)
맛동산
모든 변수의 편미분을 백터로 정리한 것이 기울기 다음은 1차원 백터의 기울기 구현(다차원이 아니므로 아직 큰 의미는 없음) 각 x에 대한 f(x+h) - f(x-h) / 2h의 적용(편미분)은 같음 import numpy as np def f_2(x): return np.sum(x**2) def numerical_gradient(f,x): # 3 4 h = 1e-4 grad = np.zeros_like(x) # x와 shape이 같은 0행렬(배열) 생성 #print(grad) for idx in range(x.size): tmp_val = x[idx] #print(tmp_val) x[idx] = tmp_val + h #print(x[idx]) fxh1 = f(x) print(fxh1) #print(tmp..
미분식에서 x+h와 x-h사이의 아주 작은 구간에서의 차를 구하는것을(중심 차분) 수치 미분이라 함 def numerical_diff(f, x): h = 1e-4 return (f(x+h) - f(x-h)) / (2*h) def f_1(x): return 0.01*x**2 + 0.1*x # y = 0.01x^2 + 0.1x # y' = 2*0.01x + 0.1 print(numerical_diff(f_1,5)) # 0.1999999999990898
가중치는 책에 있는거 가져와서 씀(chap03) # coding: utf-8 import sys, os sys.path.append(os.pardir) # 부모 디렉터리의 파일을 가져올 수 있도록 설정 import numpy as np import pickle from dataset.mnist import load_mnist from common.functions import sigmoid, softmax np.max def get_data(): (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=True) #print(len(t_train)) #print(len(t_test)) retur..
훈련 데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾아내는것이 기계학습의 과정. 이렇게 하려면 모든 훈련 데이터를 대상으로 손실 함수 값을 구해야함. 수백 수천만이 넘든 데이터를 대상으로 손실함수를 계산하는 것은 비용적인 문제가 있음. 그럴때 데이터 일부를 추려 전체의 근사치로 이용하는데 이것을 mini batch라고 함 import sys, os sys.path.append(os.pardir) # 부모 디렉터리의 파일을 가져올 수 있도록 설정 import numpy as np import pickle from dataset.mnist import load_mnist from common.functions import sigmoid, softmax def get_data(..
# normalize = True : 0.0~1.0 사이로 정규화, False : 0~255 사이 값 유지 # flatten = 1차원 배열로 평탄화할지 -> 1*28*28 vs 784 # one_hot_label = True : 정답인 라벨의 원소만 1 [0,0,1], False : 1, 5 등 정답 자체를 저장
import numpy as np def mean_squared_error(y,t): return 0.5 * np.sum((y-t)**2) def cross_entropy_error(y,t): delta = 1e-7 return -np.sum(t*np.log(y+delta)) # 정답이 아닌 나머지는 tk = 0이므로 정답일 때의 출력이 전체 값을 정하게 된다 t = [0,0,1,0,0,0,0,0,0,0] # 답은 2 y = [0.1,0.05,0.6,0,0.05,0.1,0,0.1,0,0] # 0.6의 출력으로 2라고 추정 print(mean_squared_error(np.array(y),np.array(t))) print(cross_entropy_error(np.array(y),np.array(t))) ..
배열을 하나씩 던져주는것보다 묶음으로 던져주는게 순수 CPU 가용량이 좋다 # coding: utf-8 import sys, os sys.path.append(os.pardir) # 부모 디렉터리의 파일을 가져올 수 있도록 import numpy as np import pickle from dataset.mnist import load_mnist from common.functions import sigmoid, softmax def get_data(): (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False) return x_test, t_test def init_network()..
데이터 전체의 분포를 고려해 전처리 ex) 데이터 전체 평균과 표준편차를 이용, 데이터들이 0을 중심으로 분포하도록 이동, 데이터 확산범위를 제한하는 정규화 그 외에도 전체 데이터를 균일하게 분포시키는 데이터 백색화 등
[.2 .8 .4 .4 .5] np.max -> .8 (최대값) np.argmax -> 1 (최대값의 인덱스) 이산문제의 경우 신경망 출력층에서 np.argmax의 인덱스로 분류
import numpy as np def softmax(a): c = np.max(a) exp_a = np.exp(a-c) sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y a = np.array([0.3,2.9,4.0]) y3 = softmax(a) print(y3) print(np.sum(y3)) 소프트맥스 함수의 출력의 총합이 1 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않음 * 단조증가함수 -> a 결과적으로 신경망으로 분류할 때는 출력층의 소프트맥스 함수 생략 가능, 현업에서도 지수 함수 계산에 드는 자원 낭비를 줄이고자 출력층의 소프트맥스 함수는 생략하는 것이 일반적 출력층의 뉴런 수는 풀려는 문제에 맞게 적절히 정해야함. '..