4.15 딥러닝
DNN
신경망의 이름
대부분의 방법을 포함함
순서
신경망 만들기 : 몇개의 레이어를 만들거냐? ->레이어 안에 뉴런을 몇개 넣을것인가
->레이어 추가
->신경망을 완성시킨다
# 신경망을 완성시킨다
network.compile(optimizer='rmsprop', #가중치 조절하는 것
loss='categorical_crossentropy', #여러가지를 위한 손실 함수
metrics=['accuracy']) #무슨 지표로 이 동작을 실행 시킬것이냐
rmsprop : 최적화 알고리즘으로 제일 좋은 것
둘 중 하나일때는 명확하게 sigmoid, tanh 알고리즘 + binary_crossentropy
셋이상일때는 길게 빼주는게 좋다. LU계열 알고리즘(주로 사용) + categorical_crossentropy
activation : 어떤 값이 들어왔을때 통과 유무를 판단하는 함수activation='sigmoid'면 0 또는 1일때
=====> loss='binary_crossentropy' ====== loss 함수는 항상 마지막 레이어랑 연동
activation='softmax'면 3개이상
=====> loss=' categorical_crossebtropy'
분류로서 sigmoid 랑 softmax 를 쓰기때문에 crossentropy가 겹치게 됨
softmax 의 특징
1대1대1의 관계를 증명 해 준다.
총합이 1이 나와야 한다.
딱 떨어지는 숫자가 아니라도 확률로서 계산해줌
network.add(layers.Dense(512, activation='relu',input_shape=(28* 28,)))
network.add(layers.Dense(10, activation='softmax'))
마지막에 레이어에 softmax를 쓴 이유 : 최종결론이 나와야 됨, 784개의 데이터가 10개의(0~9)데이터로 가게 되는데, 어떤 숫자데이터일지 확률을 따지기 때문
컴퓨터 입장에서 (60000,28,28)은 3차원식 계산,히자만 (60000,28*28)은 2차원식 계산이라 처리속도가 빨라짐
#1행당 784개의 데이터를 넣고 60000개의 행이 있는 것 train_images = train_images.reshape(60000, 28 * 28 )
train_images = train_images.astype('float32') /255
실수형으로 바꾸고, 바꾼 값이 0~255사이에 존재하게 됨
network.fit(train_images, train_labels, epochs=5, batch_size=128)
epochs 아래 과정을 몇번 반복 할 것인가
batch_size 한 번 돌릴 때 데이터 사이즈를 결정 /128 정도로 끊어서 돌리겠다
network.evaluate(test_images, test_labels)
.evaluate : 평가를 위한 메소드
알고리즘 적용 순서
GD : gradient depression 경사하강법
Movie Review classfication
imdb.load_data(num_words=10000)
keras문법, imdb.load_data() : 전체 데이터를 다 가져옴= 분석 힘듬
원래 단어로 복원시켜주는 방법
word_index는 단어와 정수 인덱스를 매핑한 딕셔너리입니다
word_index = imdb.get_word_index()
정수 인덱스와 단어를 매핑하도록 뒤집습니다
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
리뷰를 디코딩합니다.
0, 1, 2는 '패딩', '문서 시작', '사전에 없음'을 위한 인덱스이므로 3을 뺍니다
decoded_review = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]])
.get_word_index() 숫자로 된 데이터를 원래의 단어 데이터로 가져오는 명령어
숫자데이터로 남은 이유 : 단어를 숫자로 치환하고 숫자로 학습해서 긍정적,부정적 데이터를 입력하는 것, 1번은 긍정적, 0번은 부정으로
원 윈 인코딩
1~10000개의 칸에 대해
1을 포함하고 싶다면 0번째 칸만 1로 하고 나머지 9999개를 0으로
2를 포함하고 싶다면 1번쨰 칸만 1로 하고 나머지 9999개를 0으로 하는 방법
np.zero((10,dimension))
zero 메소드는 파라미터 한 개만 사용하기 때문에 튜플 타입으로 표현해야됨 (10,dimension)
10 이 행, dimension이 열, 10만큼 배열을 만든다.
for i, sequence in enumerate(sequences):
results[i, sequence] = 1.
enumerate(sequences) sequences의 값 순서에 따라 자동으로 index번호를 매겨줌
i 에는 인덱스 번호가, sequence에는 sequences의 값이 순서대로 들어가게됨
sequences=[3,5,7,9,12] 일때
result[0,3] 이니까 0행 3열의 값에 1을 넣게됨
=> 0과 1로 이루어진 숫자 모양 데이터 나옴
CNN convolutional Neural Networks
합성곱 신경망
초록색 블럭이 실제 데이터
=9픽셀을 곱해서 1픽셀로 축소한다.
=이것을 반복하는 것
=합성곱 사이즈 지정 가능
valid : 실제 데이터가 가진 특성을 최대한 살리려고 함. 데이터를 넉넉하게 잡는다?
model.add(layer.Conv2D(32,(3,3), input_shape(28,28,1)))
(3,3): 합성곱 사이즈
(28,28,1) 흑백이라 1 컬러면 3
MaxPooling2D(pool_size(2,2)
사소한 변화를 무시하는 레이어
가장큰 값들만 모아서 새 데이터 만드는 레이어
Flatten layer
Dense layer로 최종적으로 값을 뽑아내게 됨
Unicode
Ansi 코드를 각 나라가 자체 표준을 하다가 통일이 안되는 문제가 발생하면서 전 세계에서 모여서 만든 체계,
한자 비율이 제일 크고 그 다음이 한글
고어 (古)도 표현가능
글자의 모양 인식 (수학적 인식)
폰트가 바뀌면 인식을 못하는 문제 발생
-> 머신러닝의 학습으로 인식률을 높임
tip
categorical로 바꾸는 이유
구하고 있는 것이 연산가능한 숫자가 아닌 구별을 위한 숫자이기 때문
from tensorflow.keras.utils import to_categorical
레이어 간 투과할때 뉴런의 갯수는 계속 낮아져야됨
16 => 2 =>16 (X)
16 =>16 => 1 (O)
.history 실행했던 결과를 보여줌
Author And Source
이 문제에 관하여(4.15 딥러닝), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeabin1129/4.15-딥러닝저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)