본문 바로가기
ML

TensorFlow 도전기 (with Coursera 2일차)

by krheyjin 2021. 6. 4.
728x90
반응형

1. 내가 대~충 이해한 전반부 강의 내용
-사람은 형태나 성질등을 통해 사물을 카테고라이징 하는 능력이 있는데
-컴퓨터에게 이것을 어떻게 장착시키는가?
-사물의 형태나 성질을 수치화하여, 수치사이의 관계성을 학습시키면 되지않을까?
-어떻게?
-그림이 있다고 치면, 그 그림의 픽셀을 행렬화한다. nxm의 형식으로
색을 RGB처럼 0~255사이의 숫자로 표현한다.
-카테고라이징 해본다. 어느 카테고리인지는 숫자로 표현한다.


2. Walk through a Notebook for computer vision
이 장의 내용을 잘 이해하는 것이 중요하다고 판단했다.

model = tf.keras.models.Sequential([tf.keras.layers.Flatten(), 
                                    tf.keras.layers.Dense(128, activation=tf.nn.relu), 
                                    tf.keras.layers.Dense(10, activation=tf.nn.softmax)])


모델을 만들때 사용하는 패러미터들에 대한 설명들
-Sequential: 신경망에서 층의 시퀀스
-Flatten: 2차원을 1차원세트로 만들어줌
-Dense: 뉴런층 추가
뉴런의 각 층은 activation function이 필요하다. 예를들면 하기와같은.
-relu: "If X>0 return X, else return 0", 즉 X는 0 이상의 값을 네트워크의 다음 레이어로 전달한다.
-softmax: 일정 집합안에서 가장 큰 값을 1로, 그렇지 않은값은 전부 0으로 리턴한다.

이 설명 뒤에 나오는 Exercise가 흥미롭다.
-tf.keras.layers.Flatten()을 삭제하면? 데이터 차원이 안맞는다고 에러먹는다. 
-tf.keras.layers.Dense(1024,~)로 늘리면? 시간은 더 걸리겠지만 높은 일치도를 얻을 수 있다.
-tf.keras.layers.Dense(5,~) 10을 5로 바꾸면? 마지막 레이어는 카테고리(class)수와 일치해야해서 에러먹는다.
-마지막 뉴런층은 건드리지 않고 뉴런층을 하나 더하면? 크나큰 영향은 없다.
-epochs의 값을 늘리거나 줄이면? 설정치에 따라 좋을수도 나쁠수도 있다. overfitting이라는 부작용도 있다고한다.
-노멀라이징(going from values that were 0-255 to values that were 0-1)을 안하면 어떻게되나?

 

3. Using Callbacks to control training

콜백을 사용하여 시간효율적인 학습을 시켜줄수 있다. 원하는 accuracy가 나오면 학습을 중지시켜주니까.
<참고용 텐서플로 관련 내용> https://www.tensorflow.org/guide/keras/custom_callback

 

자신만의 콜백 작성하기  |  TensorFlow Core

시작하기 콜백은 훈련, 평가 또는 추론 중에 Keras 모델의 동작을 사용자 정의할 수 있는 강력한 도구입니다. TensorBoard로 훈련 진행 상황과 결과를 시각화하기 위한 tf.keras.callbacks.TensorBoard 또는 훈

www.tensorflow.org

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs={}):
    if(logs.get('accuracy')>0.6):
      print("\nReached 60% accuracy so cancelling training!")
      self.model.stop_training = True

콜백 클래스를 상속해서 on_epoch_end 를 오버라이딩..일까나?(저는 인프라쪽입니......)
이 메서드는 훈련 중 epoch가 끝날 때 호출됨.

callbacks = myCallback()
#...(생략)...
model.fit(x_train, y_train, epochs=10, callbacks=[callbacks])

쓰는건 이렇게.

3. submit
드디어 기다리고 기다렸지만 약간은 귀찮기도한 과제제출의 시간~
문제는 다음과 같음.

In the course you learned how to do classificaiton using Fashion MNIST, a data set containing items of clothing. There's another, similar dataset called MNIST which has items of handwriting -- the digits 0 through 9. Write an MNIST classifier that trains to 99% accuracy or above, and does it without a fixed number of epochs -- i.e. you should stop training once you reach that level of accuracy. Some notes:

1. It should succeed in less than 10 epochs, so it is okay to change epochs= to 10, but nothing larger
2. When it reaches 99% or greater it should print out the string "Reached 99% accuracy so cancelling training!"
3. If you add any additional variables, make sure you use the same names as the ones used in the class 

흐음... 학습자료와 거의 비슷하니...배끼자.
바퀴는 다시 발명하지 말라는 말이 있지.
하다보니 허접한 에러와 직면하게 됨.

1) callbacks어디갔니?

위에 callbacks = myCallback()라고 써야한다고 해놓고서도 안써놓는 수듄....
그래도 바로 알았으니 잠시 붕어였다고 생각하고 바로 수정!

2) TypeError: '>' not supported between instances of 'Nonetype' and 'float'

..이거는 이유는 모르겠지만, logs가 딕셔너리인데 뽑아올때 잘못 뽑아오는듯.
https://github.com/tensorflow/tensorflow/issues/36358
깃허브에 사람들의 유의미한 담소들이 있으므로 참조해본바, 해결.

3) 완성

 

4. 2일차도 끝

1일차는 좀 막막했는데, 하다보니 재미있네요 ㅎㅎ 월요일부터 GCP가 시작되니
주말안에 이거 다 끝내야 겠습니다.

728x90
반응형

댓글