cv - 패턴을 일치시켜 classification을 수행, feature 기반

 

NLP

 

LISTEN vs SILENT

두 단어는 같은 아스키 값들을 가진다. but 반대의 의미

 

단어마다 값이 있고, 같은 단어에 대해 값이 동일하도록

ex)

i love my cat. / i love my dog

1 2    3   4      1 2    3    5

 

"Tokenizer(num_words=고유단어 개수)"

 

 

 

 

 

 

Publications

ML Engineer

rishabhmisra.github.io

fit 호출 시 단어 인덱스 생성, 토크나이저 초기화

 

- IMDB dataset(movie review)

http://ai.stanford.edu/~amaas/data/sentiment/

 

Sentiment Analysis

Publications Using the Dataset Andrew L. Maas, Raymond E. Daly, Peter T. Pham, Dan Huang, Andrew Y. Ng, and Christopher Potts. (2011). Learning Word Vectors for Sentiment Analysis. The 49th Annual Meeting of the Association for Computational Linguistics (A

ai.stanford.edu

K9라는 단어를 본 적이 없어도 K9가 개와 관련된 개와 비슷한 것을 의미한다는 것을 알고리즘에 알릴 수 있습니다.

built in dataset - tfts(tensorflow data services)

'embedding'

어떤 단어와 관련단어를 다차원 공간에서 벡터로 묶음

 

<조건>

1. python 3.0ver

2. tensorflow 2.0ver

(그보다 낮을 경우 tf.enable_eager_execution()실행 필요

더보기

이제부터 살펴 보겠습니다. TensorFlow에서 이번 주 코드 작업을 시작하기 전에 고려해야 할 몇 가지 사항이 있습니다.

 

첫 번째는 사용중인 TensorFlow 버전입니다. 이 코드를 사용하여 결정하십시오. 또한 여기에서 사용하는 모든 코드는 Python 3에 있습니다. Python 2를 사용하는 경우 약간의 차이가 있으므로 Colab을 사용하는 경우 환경을 3으로 설정할 수 있습니다. 자신의 환경에서이 작업을 수행하는 경우 몇 가지 사항을 변경해야 할 수도 있습니다. 이전 코드에서 TensorFlow 1.x를 제공 한 경우 계속 진행하려면이 코드 줄이 필요합니다. 그것이 2.x를 주었다면,

 

TensorFlow 2.0에서 기본적으로 더 빠른 실행이 활성화되어 있기 때문에 아무것도 필요하지 않습니다. Google Colab을 사용하는 경우 TensorFlow 데이터 세트가 이미 설치되어 있어야합니다. 그것들이 없으면이 코드 줄로 쉽게 설치됩니다. 이제 TensorFlow 데이터 세트를 가져올 수 있으며이 경우에는 tfds라고합니다. imdb 리뷰를 사용하여 tfds.load를 호출하고 문자열 imdb reviews를 전달하면 imdb의 데이터와이 코드로 메타 데이터를 반환합니다.

 

데이터는 교육용 25,000 개 샘플과 테스트 용 25,000 개 샘플로 나뉩니다. 나는 이것을 이렇게 나눌 수 있습니다. 이들 각각은 25,000 개의 각 문장과 레이블을 텐서로 포함하는 반복 가능 항목입니다.

 

지금까지는 문장 배열에 Cara의 토크 나이저와 패딩 도구를 사용 했으므로 약간의 변환이 필요합니다. 우리는 이렇게 할 것입니다. 먼저 훈련 및 테스트 데이터에 대한 문장과 레이블이 포함 된 목록을 정의하겠습니다. 이제 문장과 레이블을 추출하는 훈련 데이터를 반복 할 수 있습니다.

 

S I의 값은 텐서이므로 NumPy 메소드를 호출하여 실제로 값을 추출합니다. 그런 다음 테스트 세트에 대해서도 동일한 작업을 수행합니다.

 

 다음은 검토의 예입니다. 이 슬라이드에 맞게 잘랐지만 tf.tensor로 저장되는 방법을 볼 수 있습니다.

 

마찬가지로, 여기에도 텐서로 저장된 많은 레이블이 있습니다. 1은 긍정적 인 리뷰를 나타내고 0은 부정적인 리뷰를 나타냅니다. 교육 할 때 레이블은 NumPy 배열 일 것으로 예상됩니다. 방금 만든 레이블 목록을이 코드를 사용하여 NumPy 배열로 바꿉니다.

 

다음으로 문장을 토큰 화합니다. 코드는 다음과 같습니다. 리터럴의 함수 시퀀스를 통해 피싱 한 다음 변경하는 대신 하이퍼 파라미터를 가장 쉽게 변경하고 편집 할 수 있도록 하이퍼 파라미터를 맨 위에 배치했습니다.

 

이제 이전과 마찬가지로 토크 나이저와 패드 시퀀스를 가져옵니다. 토크 나이저 인스턴스를 생성하여 어휘 크기와 원하는 어휘 토큰을 제공합니다.

 

이제 훈련 데이터 세트에 토크 나이저를 적용 할 것입니다.

 

단어 색인이 생성되면 이제 단어가 포함 된 문자열을 해당 단어에 대해 만든 토큰 값으로 바꿀 수 있습니다.

 

이것이 시퀀스라고하는 목록입니다. 이전과 마찬가지로 문장의 길이는 변합니다. 따라서 maxlength 매개 변수에 의해 결정된 모든 동일한 길이가 될 때까지 시퀀스 된 문장을 채우거나 자릅니다.

 

그런 다음 테스트 시퀀스에 대해 동일한 작업을 수행합니다. 단어 색인은 학습 세트에서 파생 된 단어이므로 테스트 시험에서 더 많은 어휘 토큰을 볼 수 있어야합니다.

 

이제 신경망을 정의 할 차례입니다. 이 줄을 포함하는 것을 제외하고는 지금까지 매우 친숙해 보일 것입니다. 이것이 TensorFlow에서 텍스트 감정 분석의 핵심이며, 이것이 바로 마술이 일어나는 곳입니다.

문장 속의 단어, 비슷한 의미일 수록 가깝다.

ex) 이영화는 지루하고 재미없었어. 이 영화는 재미있고 흥미로웠어

-> 지루& 재미없다, 재미 & 흥미롭다

 

tf.Tensor사용

embedding결과 -> 문장 길이만큼의 2D array

flatten() 사용 -> 출력벡터의 크기 때문에 해당 길이만큼이 안나옴

해결방법) GlobalAveragePooling1D()를 사용한다.

 

sequence에서 value와 key를 뒤집어야 한다.

 

16차원 값 -> vector.tsv로

실제 단어 -> meta.tsv로

(projector.tensorflow.org)

 

 

hyper parameter를 조정하면서 val_loss확인

max_length=1000과 truncate = pre,  padding = post max_length=1000과 truncate = post,  padding = pre

 

max_length=1000과 truncate & padding = post max_length=1000과 truncate & padding = pre
max_length=32와 truncate & padding = pre max_length=32와 truncate & padding = post
max_length = 1000, embedding_dim = 32(before 16) max_length = 1000, vocab_size = 1000(before 10000)

https://github.com/tensorflow/datasets/tree/master/docs/catalog

 

tensorflow/datasets

TFDS is a collection of datasets ready to use with TensorFlow, Jax, ... - tensorflow/datasets

github.com

https://www.tensorflow.org/datasets/catalog/overview

 

TensorFlow Datasets

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trade

www.tensorflow.org

https://github.com/tensorflow/datasets/blob/master/docs/catalog/imdb_reviews.md

bytes -> text들은 byte level로 encode되어 있다.

- subwords text encoder

https://www.tensorflow.org/datasets/api_docs/python/tfds/features/text/SubwordTextEncoder

 

tfds.features.text.SubwordTextEncoder  |  TensorFlow Datasets

Invertible TextEncoder using word pieces with a byte-level fallback. Inherits From: TextEncoder tfds.features.text.SubwordTextEncoder( vocab_list=None ) Used in the notebooks Encoding is fully invertible because all out-of-vocab wordpieces are byte-encoded

www.tensorflow.org

사전 훈련 된 하위 단어 토크 나이저가 있으므로 하위 단어 속성을 확인하여 어휘를 검사 할 수 있습니다. 

 하위 단어의 의미는 종종 의미가 없으며 의미있는 의미를 갖는 순서로 조합 할 때만 사용됩니다

 

- ValueError: logits and labels must have the same shape ((None, 1) vs ())

train_data = train_data.map(lambda x_text, x_label: (x_text, tf.expand_dims(x_label, -1)))

test_data = test_data.map(lambda x_text, x_label: (x_text, tf.expand_dims(x_label, -1)))

https://developers.google.com/machine-learning/glossary?hl=ko

https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture

https://subinium.github.io/Keras-6-1/

https://wikidocs.net/32105

- purpose of embedding dimensions

: number of dimensions for the vector representing the word encoding

- num_words=n parameter do..

; specifies the maximum number of words to be tokenized and picks the most common 'n' words

(가장 빈도 수 높은 n개의 단어)

 

단어 순서가 바뀌면 문장의 의미가 크게 바뀔 수 있다.

 

RNN -> 컨텍스트가 타임 스탬프 보존, 더 긴 문장에서는 손상될 수 있다.

LSTM -> 셀 상태(컨텍스트를 끝까지 전달하는 컨베이어 벨트), 

 

단어가 하위 단어로 나뉘어 질 때 단어의 문맥을 따르기가 어려웠으며 하위 단어의 토큰이 나타나는 순서가 의미를 이해하는 데 매우 중요해 졌기 때문입니다

 

# RNN

x input, y - output

x0는 네트워크를 통해 모든 요소에 공급된다.

https://www.coursera.org/lecture/nlp-sequence-models/deep-rnns-ehs0S

 

Deep RNNs - Recurrent Neural Networks | Coursera

Video created by deeplearning.ai for the course "Sequence Models". Learn about recurrent neural networks. This type of model has been proven to perform extremely well on temporal data. It has several variants including LSTMs, GRUs and ...

www.coursera.org

context를 통해 다음 단어를 유추할 수 있다. Syntactic Issue

ex) today has a beautiful blue~

 ==> today has a beautiful blue sky

 

#LSTM

cell state means that they carry context along with them,

RNN에서 유지되는 context이외에 'cell state'라 불리는 추가 컨텍스트 파이프라인 존재

양방향, 단방향 가능/ 장,단기 메모리

https://www.coursera.org/lecture/nlp-sequence-models/long-short-term-memory-lstm-KXoay

 

Long Short Term Memory (LSTM) - Recurrent Neural Networks | Coursera

Video created by deeplearning.ai for the course "Sequence Models". Learn about recurrent neural networks. This type of model has been proven to perform extremely well on temporal data. It has several variants including LSTMs, GRUs and ...

www.coursera.org

tf.keras.layers.LSTM(x)

-> x = 해당 레이어에서 원하는 출력 수
단방향이 아닌 Bidirectional이었기에 64가아닌 128 크기
return_sequences = True

-> LSTM레이어  여러개 쌓으려면(?)
 

single LSTM 에 비해 Multi LSTM이 더 smooth 한 결과를 내놓음

-> 10epoch에서는 둘다 결과가 비슷해보이지만 epoch이 50가까이 되면 multi가 훨씬 좋음

-> single은 변동이 커 신뢰할 수 없는 정확도를 보인다.

 

다른형태의 네트워크를 같이 쓸 때는 parameter 조정을 유의(?)

5개의 단어에 대해 128개의 필터

처음과 끝의 2 단어씩 깎기 때문에 116단어가 남음
기본 LSTM GRU(different type of RNN) Convolution

-> 모두 over fitting문제 발생

image에 비해 text가 더 overfitting 많이 발생: validation에 그 전에 보지 못했던 어휘가 훨 많아서

 

key word, value token

 

- Sequence model

코드

결과

n-gram sequence 생성

n-gram sequence 생성  결과

가장 긴 문장을 찾아 그 길이에 맞추어 padding 시킴

pre padding을 사용

마지막 토큰을 레이블로 사용

마지막 토큰을 레이블로 사용

sentence 문장

x -> 마지막 토큰을 제외한 SEQUENCE

label -> 마지막 토큰, 레이블로 사용

y -> one-hot-encode, label번호만 1로 표기(이 경우는 70번째원소가 1로 표기)

  -> tf.keras.utils.to_categorical(labels, num_classes = len(word_index) + 1

 

word_index 갯수 +1 = total number of unique words that are in the corpus

 

처음 예측은 높은 확률로 말이 되는 문장을 만들어낸다. 하지만 문장의 길이가 길어질수록 점점 그 확률이 낮아져 말이 안이어짐

total_words
-> 모든 단어를 다 다룸
64
-> number of dimensions
input_length
-> max -1
-> 마지막 단어를 잘라서 label을 구하므로 max -1 길이
문장의 반복
-> LSTM이 context를 앞으로만 전달하기 때문
-> Bidirectional하게 바꾸어준다.

----------

lawrence는 없는 단어라서 무시됨

training_set과 맞춤

sequence에서 그 다음에 확률이 높은 토큰 선택

역방향 조회를 수행하여 토큰을 다시 단어로 바꾸고 시드 텍스트에 추가

https://www.tensorflow.org/tutorials/text/text_generation

 

순환 신경망을 활용한 문자열 생성  |  TensorFlow Core

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수

www.tensorflow.org

 

 

출처: coursera, natural language processing in tensorflow 과정

'공부일지 > etc' 카테고리의 다른 글

Pandas  (0) 2020.07.21
Tensorflow in Practice 3, Sequence Model  (0) 2020.06.28
아낰혼다  (0) 2020.06.24
tensorflow, keras 설치하기  (0) 2020.06.17
#Data Mining Task  (0) 2020.06.03

가상환경 설정

conda create -n 이름

 

가상환경 정보

conda info --envs

 

가상환경 삭제

conda remove --name 이름 --all

conda env remove -n  이름

기존의 프로그래밍 방식

Rules, Data -> "Programming" -> Answers

 

머신러닝

Answers, Data -> "Machine Learning" -> Rules

Labeling함으로써 데이터를 학습

 

#neural net

 

a neural network is basically a set of functions which can learn patterns.

successive layers are defined in sequence.

 

뉴럴넷에는 x와 y사이의 관계가 없다.

import tensorflow as tf
import keras
import numpy as np

model = keras.Sequential([keras.layers.Dense(units = 1, input_shape = [1])]) #1개의 뉴런(one dense), one layer
model.compile(optimizer = 'sgd', loss ='mean_squared_error')

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype =float)

model.fit(xs, ys, epochs = 500) #training loop

print(model.predict([10.0]))

rule: 2x - 1 = y

결과값: [[18.981585]]

 

19가 명확하게 안나오는 이유

1. 너무 적은 데이터로 학습시킴( 6개의 값)

2. probability로 판단하니까

 

epoch을 거듭하면서 점점 정확해짐

-> epoch은 loss function을 사용해서 추측을 잘 했는지 못했는지 판단, optimizer를 이용해 다른 추측값을 줌

 

loss가 줄어든다 =  x->y의 관계에 근접해감을 의미

 

- 컴퓨터 비전은 rules-based programming으로 해결하기 어렵다. -> 딥러닝을 써보자

컴퓨터가 사진을 보고 인식(recognize)하게 해준다. -> 딥러닝으로

 

Computer Vision is the field of having a computer understnad and label what is present in an image.

 

Fashion MNIST

https://github.com/zalandoresearch/fashion-mnist

 

zalandoresearch/fashion-mnist

A MNIST-like fashion product database. Benchmark :point_right: - zalandoresearch/fashion-mnist

github.com

10 different items, 28 * 28 pixels, grayscale, 70k images, 

-> 784bytes

 

Machine Learning depends on having good data to train a system with.

 

train: use some of my data (60,000이미지 사용)

test: similar data that the model hasn't yet seen to test how good it is at recognizing the images(10,000이미지 사용)

 

Label을 번호로 사용하는 이유(ex. 앵클부츠라는 단어 대신 숫자 9로 분류하는 이유)

1. 컴퓨터가 texts보다 숫자를 더 잘 사용함

2. bias를 줄이는데에 도움 -> 숫자는 어느 나라든 사용하니까

(recent bias, latent bias, selection bias) ?

 

이미지 픽셀값들을 255로 나눠서 0~1 범위를 갖게 한다.

더보기

Flatten: Remember earlier where our images were a square, when you printed them out? Flatten just takes that square and turns it into a 1 dimensional set.

 

Dense: Adds a layer of neurons

Each layer of neurons need an activation function to tell them what to do. There's lots of options, but just use these for now.

Relu effectively means "If X>0 return X, else return 0" -- so what it does it it only passes values 0 or greater to the next layer in the network.

Softmax takes a set of values, and effectively picks the biggest one, so, for example, if the output of the last layer looks like [0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05], it saves you from fishing through it looking for the biggest value, and turns it into [0,0,0,0,1,0,0,0,0] -- The goal is to save a lot of coding!

정확도 올리기

1. hidden layer갯수 증가

2. epoch 증가

 

내가 원하는 지점에 도달했을 때 학습을 중지하는 방법

: model.fit()의 파라미터에 callback 설정

class myCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs ={}):
        if(logs.get('acc') >=0.99):
            print("Reached 99% accuracy so cancelling training!")
            self.model.stop_training = True
            
callback = myCallback()

#Convolutional Newral Networks

 pooling is a way of compressing an image

 

tf.keras.layers.Conv2D(
    filters, kernel_size, strides=(1, 1), padding='valid', data_format=None,
    dilation_rate=(1, 1), activation=None, use_bias=True,
    kernel_initializer='glorot_uniform', bias_initializer='zeros',
    kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,
    kernel_constraint=None, bias_constraint=None, **kwargs
)

https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D

 

tf.keras.layers.Conv2D  |  TensorFlow Core v2.2.0

See Stable See Nightly 2D convolution layer (e.g. spatial convolution over images). View aliases Main aliases tf.keras.layers.Convolution2D Compat aliases for migration See Migration guide for more details. tf.compat.v1.keras.layers.Conv2D, tf.compat.v1.ke

www.tensorflow.org

tf.keras.layers.MaxPool2D(
    pool_size=(2, 2), strides=None, padding='valid', data_format=None, **kwargs
)

https://www.tensorflow.org/api_docs/python/tf/keras/layers/MaxPool2D

 

tf.keras.layers.MaxPool2D  |  TensorFlow Core v2.2.0

Max pooling operation for 2D spatial data. View aliases Main aliases tf.keras.layers.MaxPooling2D Compat aliases for migration See Migration guide for more details. tf.compat.v1.keras.layers.MaxPool2D, tf.compat.v1.keras.layers.MaxPooling2D tf.keras.layers

www.tensorflow.org

https://www.youtube.com/playlist?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF

 

Convolutional Neural Networks (Course 4 of the Deep Learning Specialization) - YouTube

 

www.youtube.com

1 1 8 4 7 9
5 7 9 1
5 7 8 1 7 8
4 5 4 1

 

- 필터 전달 -> 정보 양 줄이고 한 클래스와 다른 클래스를 구별할 수 있는 특징을 효과적으로 추출

- 풀링 -> 정보를 압축하여 관리하기 쉽게 만드는 방법

==> 이미지 인식 성능을 향상시키는 좋은 방법

 

https://github.com/lmoroney/dlaicourse/blob/master/Course%201%20-%20Part%206%20-%20Lesson%202%20-%20Notebook.ipynb

 

lmoroney/dlaicourse

Notebooks for learning deep learning. Contribute to lmoroney/dlaicourse development by creating an account on GitHub.

github.com

https://github.com/lmoroney/dlaicourse/blob/master/Course%201%20-%20Part%206%20-%20Lesson%203%20-%20Notebook.ipynb

 

lmoroney/dlaicourse

Notebooks for learning deep learning. Contribute to lmoroney/dlaicourse development by creating an account on GitHub.

github.com

#4주차

https://www.youtube.com/watch?v=NlpS-DhayQA


 

#Image Generator

 

특징: 디렉토리를 가리키고 하위 디렉토리 자동으로 레이블 생성

하위 디렉토리를 기반으로 파일을 자동으로로드하고 레이블을 지정하는 신경망

디렉토리 구조

 

Image Directory의 하위 Directory, Training & validation

각 하위 Directory 에 horse와 human이미지 저장 -> Image Generator가 해당 이미지에 대한 Feeder를 만들고 알아서 Label을 만든다.

(Image Generator가 Training Directory를 가리키면, label은 horse와 human이 되고, 모든 이미지는 라벨링 되어 불러와짐)

 Data normalize를 위해 rescale
Directory에서 flow method를 호출
-> 해당 디렉토리 및 서브 디렉토리의 이미지 로드
(서브디렉토리에서 부르면 안 된다!)

target_size: 뉴럴넷의 input size는 항상 동일하므로 일관적으로 같은 크기로 resize
(load할 때 resize하므로 전처리 필요없음)

batch_size: 성능 영향, 바꿔가며 확인

서브디렉토리 명은 이미지의 라벨명

 

convolution 3번 
-> higher complexity and size of the image

298 * 298 `~> 35*35

300*300 image, rgb channel 3
sigmoid는 binary classfication에 아주 좋음, 하나는 0으로, 다른 하나는 1로

softmax를 이용해 2개의 뉴런을 아웃풋으로 설정할 수 있다.


convolution거친 후 flatten에 들어가는 뉴런 갯수
== 78400(35 * 35 * 64)

만약 convolution이 없었다면
== 900,000(300*300)

-> 데이터를 잔뜩 줄일 수 있음

- model.compile

binary choice를 하기 때문에 binary_crossentropy로

RMSprop

- training, model.fit_generator

datatset 대신에 generator를 쓰기 때문에 model.fit이 아닌 model.fit_generator

traing_generator: 일전에 설정했던 training generator
- training directory에서 이미지들을 스트리밍한다.
=================

1024 이미지를 128씩 불러옴 -> 모든 이미지를 불러오려면 8번의 batch 
--> steps_for_epoch = 8
==================
validation_generator
-> 256이미지, 32씩 불러옴
-> validation_steps= 8
==================
verbose parameter
-> 학습이 진행될 동안 표시할 양 지정

 

# Binary Crossentropy

https://gombru.github.io/2018/05/23/cross_entropy_loss/

 

Understanding Categorical Cross-Entropy Loss, Binary Cross-Entropy Loss, Softmax Loss, Logistic Loss, Focal Loss and all those c

People like to use cool names which are often confusing. When I started playing with CNN beyond single label classification, I got confused with the different names and formulations people write in their papers, and even with the loss layer names of the de

gombru.github.io

#RMSprop

http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

https://www.youtube.com/watch?v=eqEc66RFY0I&t=6s

 

 

# Binary Classification

logistic Regression

1 - cat, 0 - non cat

 

픽셀 값들을 Feature Vector로 바꾸려면 모든 픽셀값을 입력될 Feature Vector X의 1열로 나열

픽셀값을 하나의 벡터로 펼친다.

ex) 64*64 컬러 이미지를 펼치면, 그 크기는 64*64*3의 크기를 가짐

 

(x, y) ->x는 feature vector, y는 label

X = [x1 x2 x3 ..... xm] (m은 training sample 개수)

x = (n_x, m)

y = (1, m)

 

- Horses or Humans Convnet

https://github.com/lmoroney/dlaicourse/blob/master/Course%201%20-%20Part%208%20-%20Lesson%202%20-%20Notebook.ipynb

 

lmoroney/dlaicourse

Notebooks for learning deep learning. Contribute to lmoroney/dlaicourse development by creating an account on GitHub.

github.com

 

- Horses or Humans with Validation

https://github.com/lmoroney/dlaicourse/blob/master/Course%201%20-%20Part%208%20-%20Lesson%203%20-%20Notebook.ipynb

 

lmoroney/dlaicourse

Notebooks for learning deep learning. Contribute to lmoroney/dlaicourse development by creating an account on GitHub.

github.com

 

- Horses or Humans With Compacting of Images

https://github.com/lmoroney/dlaicourse/blob/master/Course%201%20-%20Part%208%20-%20Lesson%204%20

-%20Notebook.ipynb

 

lmoroney/dlaicourse

Notebooks for learning deep learning. Contribute to lmoroney/dlaicourse development by creating an account on GitHub.

github.com

#Image Augmentation

: over fitting을 피하는데 좋음

- 제한된 데이터 -> 결과 또한 제한적

- rotation과 같은 변형을 이용해 학습(ex. 누워있는 고양이와 서있는 고양이 이미지를 동시에 얻을 수 있음)

https://github.com/keras-team/keras-preprocessing

 

keras-team/keras-preprocessing

Utilities for working with image data, text data, and sequence data. - keras-team/keras-preprocessing

github.com

https://keras.io/api/preprocessing/image/

 

Keras documentation: Image data preprocessing

Image data preprocessing image_dataset_from_directory function tf.keras.preprocessing.image_dataset_from_directory( directory, labels="inferred", label_mode="int", class_names=None, color_mode="rgb", batch_size=32, image_size=(256, 256), shuffle=True, seed

keras.io

rescale - 이미지 로드 시에 크기 변환

rotation_range - 0~value사이의 random값으로 회전

width(height)_shift_range
- 대부분의 이미지는 피사체가 중간에 잇음


shearing - 기울기 값

zoom - 전신샷 -> 상반신샷으로 바꿀 수 있음
- ~value값 까지 랜덤하게 결정됨

horizontal_flip - 좌우반전(랜덤하게 반전됨)

fill_mode - 손실된 픽셀 채우기




- Image Augmentation이 오버피팅을 피하는 확실한 방법은 아니다.

 

#Transfer Learning

https://www.tensorflow.org/tutorials/images/transfer_learning

 

Transfer learning with a pretrained ConvNet  |  TensorFlow Core

In this tutorial, you will learn how to classify images of cats and dogs by using transfer learning from a pre-trained network. A pre-trained model is a saved network that was previously trained on a large dataset, typically on a large-scale image-classifi

www.tensorflow.org

lock(freeze):

You saw Transfer Learning, and how you can take an existing model, freeze many of its layers to prevent them being retrained, and effectively 'remember' the convolutions it was trained on to fit images.

freeze를 시켜 image augmentation을 할 수 있게

 

모든 레이어는 이름을 갖고 있다.

 

last_output이라는 이름의 모델 
(mixed7에서 출력을 가져온 모델)

 

<Drop out>

- 무작위로 신경망의 유닛을 삭제시키는 기법

신경망의 레이어가 때때로 유사한 가중치를 가지고 서로에게 영향을 주어 과적 합을 초래할 수 있다

왜 regulizer로 사용?

: 모든 반복마다 더 작은 신경망에서 작업

-> 정규화의 효과를 주는 듯

 

단일 유닛- > 입력을 받아 의미있는 출력을 생성해야 함

-> drop out을 통해 입력 유닛이 무작위로 삭제

-> 해당유닛은 어떠한 특징에 의존할 수 없음 -> 계속 바뀌니까

-> 특정 입력에 큰 가중치를 부여x, 입력들에 가중치를 분산시키는 방향으로 학습됨

-> shirink weights

 

keep_prob(각 layer에 해당 유닛을 유지할 확률) -> 각 레이어마다 바꿀 수 잇음

-> 과적합의 우려가 적은 층에서는 높게 설정해도 괜찮음

-> 과적합의 우려가 큰 층에서는 낮게 설정한다.

CV는 대부분 과적합이 많이 발생하기에 대부분의 경우 drop out을 쓴다.

 

단점) cost tunction이 잘 정의 x 

-> GD로 확인해도 J 가 하강하는지 확인하기 어렵다.

-> 디버깅이 어려워짐

-> keep_prob을 1로 설정한 후 하강하는지 확인한 다음에 drop out

 

 

drop out
- 0~1 설정
해당 %만큼  drop out

drop out 적용x drop out 적용

1. pre trained 네트워크에 대한 가중치를 사용해 새 인스턴스를 인스턴스화

2. convolutional layer 중 하나를 입력 레이어로 가져온뒤 만든 output = last output

3. last output을 입력으로 사용하여 모델을 설정(flatten,dense,drop out), 이미지 생성기 설정

 

#Multi Class classification

가위바위보 분류

http://www.laurencemoroney.com/rock-paper-scissors-dataset/

 

Rock Paper Scissors Dataset

Introducing Rock Paper Scissors – A multi class learning dataset Abstract Rock Paper Scissors is a dataset containing 2,892 images of diverse hands in Rock/Paper/Scissors poses. It is license…

www.laurencemoroney.com

softmax는 모든 경우의 확률을 고려하여 결과값을 내놓는다.

알파벳순으로 결과를 내놓음

 

 

출처: Coursera, Tensorflow in Practice 특화과정

'공부일지 > Computer Vision & Image Processing' 카테고리의 다른 글

GAN  (0) 2020.06.02
OpenCV, visual studio에서 시작  (0) 2020.05.28
SIFT 절차  (0) 2020.01.28
scale  (0) 2020.01.28
OpenCV 정리하기(1)_Finger Count  (0) 2019.10.16

 

"brute-force"

: 컴퓨터의 빠른 계산 능력을 이용,

: 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법

== 완전 탐색(exhaustive search)

 

[재귀 호출] : Recursion

: 우리가 들여다 보는 범위가 작아지면 작아질수록 각 조각들의 형태가 유사해지는 작업들

: 완전히 같은 코드를 반복해 실행하는 경우

 

"재귀 함수": 자신이 수행할 작업을 유사한 형태의 여러 조각으로 쪼갠 뒤 그 중 한 조각을 수행하고, 나머지를 자기 자신을 호출해 실행하는 함수

 

* '더이상 쪼개지지 않는' 최소한의 작업에 도달했을 때 답을 곧장 반환하는 조건문을 포함해야 한다.

--> "기저사례 base case" : 쪼개지지 않는 가장 작은 작업들

ex)

int recursiveSum(int n){
	if (n==1) return 1;
    return n + recursiveSum(n-1);
}

<0번 부터 차례대로 번호 매겨진 n개의 원소 중 네 개를 고르는 모든 경우 출력하는 코드>

ex) n = 7, (0,1,2,3), (0,1,2,4), (0,1,2,5) , ... , (3,4,5,6)

 

 

 

 

 

 

 

 

'자윤이와고리즘 > Algorithm' 카테고리의 다른 글

그리디 & 구현  (0) 2020.10.02
스택, 큐, 재귀함수, DFS, BFS  (0) 2020.09.30
Hash  (0) 2020.06.15
시간복잡도  (0) 2020.03.12
BFS기본 구조  (0) 2019.03.20

+ Recent posts