tensorflow==2.0.0

keras==2.3.0

h5py==3.1.0

 

model을 못 읽는 desirialize? 직렬화에 대한 문제가 발생.

아무래도 버전업되면서 문제가 발생한듯

그런데 나는 이미 개발을 완료함

tensorflow랑 keras버전은 그대로 두고 다른 걸 변경해야 함

pip uninstall h5py

pip install h5py==2.10.0

문제해결

3.1장에서는 2장에서 살펴본 

- 네트워크의 층(Dense)

- 입력데이터와 그에 해당하는 타겟

- 학습에 사용할 손실함수(mae, mse, crossentropy...)

- 학습 진행 박식을 결정할 옵티마이저(Adam, rmsprop...)

학습은 위와 같이 진행 됨. 

층, 네트워크, 손실함수, 옵티마이저의 개념에 대해서 좀 더 자세히 알아 보면,

3.1.1 층: 딥러닝의 단위

신경망의 핵심구조로 하나 이상의 텐서를 입력받아서 출력하는 데이터 처리 모듈[X->y]

층마다 적절한 텐서 포맷이 있고, 데이터 처리 방식이 다르다. 에를 들어 2D Tensor는 (Sample, Feature)로 Matrix를 처리하며, keras의 Fully connected layer에 의해 처리 될 수 있으나 이미지, 즉, 4D의 경우는 (Sample, Weight, height, corlor_channel)로 구성이 되어 Convolution layer에 의해 처리가 됨. 

 

다음의 2D .텐서만 입력 받는 층을 보자. 

from keras import models

from keras import layers

model = models.Sequential()

model.add(layers.Dense(32,input_shape=(784 ,)))

model.add(layers.Dense(10))

 

먼저 이 네트워크는 첫번째 차원이 784개인 Tensor만 입력받는 층이고, 32차원으로 변화된 텐서를 출력한다. 

그리고 2번째 층은 해당 32차원을 입력 받고 10개의 Tensor를 출력한다. 

이렇듯, 케라스에서는 모델에 추가된 층을 자동으로 상위 층의 크기에 맞추어 주기 때문에 호환성을 걱정하지 않아도 된다. 

 

3.1.2 모델: 층의 네트워크

네트워크의 종류에는 여러가지가 있다. 그러나 자주 등장하는 것들은 다음과 같다. 

- 가지(Branch)가 2개인 네트워크

- 출력이 여러개인 네트워크

- 인셉션(inception) 블록  -----------------------------------> 추후 설명 추가. 

 

3.1.3 손실 함수와 옵티마이저: 학습과정을 조절하는 열쇠

네트워크 구조를 정의하고 나면 두가지를 더 선택해야 함. 

- 손실함수(loss function): 학습 및 훈련하는 동안 최소화 됨 - 주어진 문제에 대한 성공지표

- Optimizer:  특정 종류의 경사학강법을 구현하여 손실함수를 기반으로 네트워크가 어떻게 업데이트 될지 결정.                                                                                                                                                                                                                                                                                                                

 

3.2절은 일반적인 Keras의 소개이며 3.3절은 딥러닝 컴퓨터 세팅인데 이므로 다음에는 바로 3.4절로 넘어가서 이진분류로 바로 실전 코딩으로 넘어가도록 하겠다. 

+ Recent posts