일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- privateKey
- nodejs
- Javascript #MDN #Webs #Docs
- keytool
- javascript #prototype # array # find()
- webpack
- 해시함수
- tsotry
- es5 #es6
- passport.js
- TensorFlow
- typescript
- CSS #pseudo-classes
- 요구사항정의서 #기획 #UI/UX기획
- Vue
- 일기
- Ke
- securitykey
- guide
- behaviorsubject
- 안좋은습관10가지
- SSL인증서
- 가상사설망
- Storyboard
- Git
- CSS #flex
- angular
- PublicKey
- anaconda
- 웹기획
- Today
- Total
민자의 지식창고
CNNS 본문
javascript를 통한 모델 생성하는 코드입니다.
Fully connected layer 만으로 구성된 인공 신경망 입력 데이터는 1차원 형태로 한정 됩니다.
사진데이터를 평면화 시키는 과정에서 공간에 손실은 이루어집니다. 이러한 공간 손실에 대한 정보 부족으로 인공 신경망이 특징을 추출 및 학습이 비효율적이고 정확도를 높이는데 한계가 있습니다.
한계를 극복한 모델이 아래와 같습니다. Fully Connected Neural Network와 비교하여, 차이는 다음과 같습니다.
Convolution Neural Network
- 각 레이어의 입출력 데이터의 형상 유지
- 이미지의 공간 정보를 유지하면서 인접 이미지와의 특징을 효과적으로 인식
- 복수의 필터로 이미지의 특징 추출 및 학습
- 추출한 이미지의 특징을 모으고 강화하는 pooling 레이어
- 필터를 공유 파라미터로 사용하기 때문에, 일반 인공 신경망과 비교하여 학습 파라미터가 매우 적음
CNN의 용도는 2가지 입니다. 이미지 특징 추출과 클래스를 분류하는 부분 입니다.
특징 추출 영역은 convolution layer와 pooling layer를 여러 겹 쌓는 형태로 구성이 됩니다
Convolution layer는 입력데이터에 필터를 적용 후 활성화 함수를 반영하는 필수 요소 입니다
다음 위치한 pooling layer는 선택적인 레이어입니다.
CNN 마지막 부분에는 이미지 분류를 위한 Fully connected 레이어가 추가 됩니다
순서로 하자면 convoultion > pooling > fully connected 입니다.
이미지 특징 추출하는 부분과 이미지를 분류하는 부분사이에 이미지 형태의 데이터를 배열 형태로 만드는 Flatten 레이어가 위치 합니다
1. Convolution layer에서 입력 데이터에는 한개 이상의 필터가 적용 되며, 1개의 필터는 Feature map의 채널이 됩니다. n개의 필터가 적용되면 출력 데이터는 n개의 채널을 갖게 됩니다.
- RGB 3개의 실수로 3차원 데이터 > 컬러 이미지는 3개의 채널로 구성 됨
- 흑백 사진은 2차원 데이터로 > 1개의 채널로 구성 됨
2.필터(Filter) &Stride
필터는 이미지의 특징을 찾아내기 위한 공용 파라미터 입니다. Filter 즉 Kernelr 이라고도 합니다
필터는 정사각형 행렬로 정의 됩니다.
3. pooling 레이어
풀링 레이어는 컨볼루션 레이어의 출력 데이터를 입력으로 받아서 출력 데이ㅓ의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다. CNN은 Max pooling을 사용 합니다.
4. padding : Convolution layer에서 Filter와 stride에 작용으로 Feature Map 크기는 입력데이터보다 작습니다. 추렭 데이터가 줄어드는 것을 막기 위해 패딩 입니다. 일반적으로 0으로 채워 넣습니다
5.convoultion : 합성곱,
script.js 소스는 아래와 같습니다.
function getModel() {
const model = tf.sequential();
const IMAGE_WIDTH = 28;
const IMAGE_HEIGHT = 28;
const IMAGE_CHANNELS = 1;
// In the first layer of our convolutional neural network we have
// to specify the input shape. Then we specify some parameters for
// the convolution operation that takes place in this layer.
model.add(tf.layers.conv2d({
inputShape: [IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_CHANNELS],
kernelSize: 5,
filters: 8,
strides: 1,
activation: 'relu',
kernelInitializer: 'varianceScaling'
}));
// The MaxPooling layer acts as a sort of downsampling using max values
// in a region instead of averaging.
model.add(tf.layers.maxPooling2d({poolSize: [2, 2], strides: [2, 2]}));
// Repeat another conv2d + maxPooling stack.
// Note that we have more filters in the convolution.
model.add(tf.layers.conv2d({
kernelSize: 5,
filters: 16,
strides: 1,
activation: 'relu',
kernelInitializer: 'varianceScaling'
}));
model.add(tf.layers.maxPooling2d({poolSize: [2, 2], strides: [2, 2]}));
// Now we flatten the output from the 2D filters into a 1D vector to prepare
// it for input into our last layer. This is common practice when feeding
// higher dimensional data to a final classification output layer.
model.add(tf.layers.flatten());
// Our last layer is a dense layer which has 10 output units, one for each
// output class (i.e. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9).
const NUM_OUTPUT_CLASSES = 10;
model.add(tf.layers.dense({
units: NUM_OUTPUT_CLASSES,
kernelInitializer: 'varianceScaling',
activation: 'softmax'
}));
// Choose an optimizer, loss function and accuracy metric,
// then compile and return the model
const optimizer = tf.train.adam();
model.compile({
optimizer: optimizer,
loss: 'categoricalCrossentropy',
metrics: ['accuracy'],
});
return model;
}
'개발노트 > Tensorflow' 카테고리의 다른 글
숫자 인식 해보기 (0) | 2020.08.12 |
---|---|
ImageDataGenerator (0) | 2020.08.06 |
이미지 숫자 인식하기3 (0) | 2020.08.04 |
이미지의 숫자 인식 하기2(CNN모델) (0) | 2020.08.04 |
이미지의 숫자 인식 하기1(CNN모델) (0) | 2020.08.04 |