본문 바로가기

머신러닝/혼자 공부하는 머신러닝

18강 심층 신경망, 인공 신경망에 층을 추가하여 심층 신경망 만들어 보기

이 글은 https://www.youtube.com/watch?v=JskWW5MlzOg&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=18&t=8s보고 고 공부한글입니다.

 

지난시간에 

패션 mnist를 사용했다. 0~9까지의 흑백 이미지 데이터이다.

 

 

2개의 층 

입력층은 생각하지 않는다.

 

784개의 뉴런을 입력으로 전달

 

은닉층에는 100개의 뉴련생성

 

소프트맥스 함수를 쓴다.

이진분류는 시그모이드를 쓴다. 

 

은닉층은 활성화 함수를 거쳐서 비선형 함수로 데이터를 변형한다음 함수식이 합쳐지지 않도록한다.

 

많은쓰는 활성화 함수가 시그모이드 함수이다.

 

 

 

심층 신경망 

은닉층100개, 출력층10개를 

dense1, dense2객체로 만든다.

 

Dense(출력층 갯수, 활성화 함수,)

활성화 함수를 지정하지 않으면 쓸모있는것을 학습하지 못한다.

 

 

summary() 메서드 

 

각 층에 dense로 자동으로 이름을 붙혀준다.

 

100,10 개의 출력이 나온다.

 

첫 번째 차원은 None으로 지정되었다. 32,64로 지정해도 된다.

 

Param = 가중치, 절편, 모델파라미터 갯수

 

은닉층의 파라미터 갯수

입력층 784개

은닉층 100개

완전연결돼있다.

가충치가 784 * 100이다.

100개의 뉴런은 100개의 절편이 있다.

 

출력층의 파라미터 갯수

은닉층 100개

출력층 10개

가중치 100 * 10

하나의 뉴런마다 1개의 절편이 있다.

 

층을 추가하는 다른 방법 

Dense의 객체를 만든자마자 층을 추가하는 방법이 있다.

 

dense는 대부분 Sequential로 전달하고 역활은 끝난다.

 

Sequential객체를 만들고 add()를 이용하여 층을 추가하는 방법이 있다.

 

 

렐루 함수와 Flatten 층 

활성함수 이다.

시그모이드 함수의 활성값은 너무 크거나 작으면 변화가 없다시피한다.(=포화됐다.)

 

뉴련의 선형함수값이 0보다 크면 출력하고 0보다 작으면 그냥 버려버린다.

 

activation='relu'라고 사용하자.

 

 

새로운 층을 만들어 보자. Flatten층

 

학습되는 파라미터가 없다. 의미있는 작업이 없다. 편의를 위해 존재한다.

 

어떤 편의?

28*28 -> 784개로 풀어서 전달했다. 이것을 Flatten이 대신한다. 

 

Flatten으로 784개 1차원 배열이 입력되었구나 라고 알 수 있다. 

 

 

 

옵티마이저 

기본적으로 확률적 경사 하강법을 사용한다. 

적응적 학습률 옵티마이저 - RMSprop, Adam, Adagrad

 

sgd객체를 만들려면 SGD()객채를 만들어야 한다.

 

객체를 만들어서 전달해도되고, optimizers=sgd라고 해도 된다.

 

 

층을 추가하는 특징이 있다.

앙상블은 트리를 여러개의 코어를 나눠서 훈련하고 합치는 것이다.

 

신경망들은 한꺼번에 훈련한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90