keras 3

(keras) Big Train data 학습

딥러닝을 이용해 모델을 학습시키기 위해서는 학습데이터의 양이 많으면 좋다 하지만 이러한 많은양의 데이터를 학습시키기 위해서 데이터 전체를 메모리에 Load하면 메모리가 부족한 현상이 발생할수 있다. 이러한 문제를 해결하기위해서는 학습시 epoch 전체의 데이터를 전달하는게 아니라 batch 사이즈마다 데이터를 나누어서 모델에게 데이터를 전달하여 학습시키는 방법이 있다. 이러한 방법중에는 Sequence 클래스를 상속하는 방법도 있지만 간단하게 할 수 있는 방법도 있어서 기록을 남긴다. 1 2 3 4 5 6 data_size = 90000 batch_size = 100 def train(batch): yield X[:batch], y[:batch] #example model.fit(train(batch_s..

(keras) tensorflow-addons CRF 사용법

NER 코드를 짜던중 CRF를 사용하여야하는데 keras-contrib 라는 라이브러리에 CRF가 있는것 같다. 하지만 해당라이브러리는 tensorflow 1.14버전에서 정상 작동하는것 같다. 현재 tensorflow 버전은 2.4 까지 나왔는데 말이다..... 그러던중 tensorflow-addons 에 CRF가 있는 것을 확인하였다. 하지만 설치를 하였지만 loss function을 어떻게 사용하는지 한참을 찾던중 (API 문서에는 나와있지 않았음...) tensorflow-addons github에 test 코드가 있는 것을 확인 하였다. 그렇게 테스트코드를 참고하여서 작성하니 정상 작동을 하였다. 잊어 버리지 않게 링크를 올려둔다. github.com/tensorflow/addons/blob/m..

(keras) Input Layer Split

텍스트 데이터를 처리하다가 시퀀스데이터를 Input Layer를 토큰단위로 나누어서 처리할 일이 필요하였다. 물론 에초에 Input Layer를 여러개 할수도 있지만 필요한 Input Layer가 200개나 되어서 별로 효율적이지 못하였다. 그래서 Tensorflow의 tf.split을 사용할수 없을까 하다가 Lambda(람다) 레이어란것을 찾을수 있었다. 람다 레이어란 레이어로 부터 받은 데이터를 사용자가 정의한 함수를 이용해 레이어단 에서 데이터를 처리(특정한 작업)를 할수 있는 것 같다. 내가 필요한 것은 tf.split 이므로, 내가 사용한 방법은 아래와 같다. 1 2 3 4 5 i2 = Input(shape=(200,10), name="x2") pos = Embedding(len(pos_set...