CNN
19235 ワード
学習内容
CNN
猫の視覚皮層の受容領域からインスピレーションを得る
コンボリューション層とマージ層を組み合わせたものです.
ボリューム:所与のデータをフィルタリングし、乗算と加算演算を計算することによってデータ特徴を抽出する方法.
filter:最小のフィーチャーをキャプチャするウェイトのセットからなるウィンドウ.
padding:畳み込み後、フィルタの形状によってデータが減少することを防止するため、データエッジに0を付けて畳み込む方式をzero paddingと呼ぶ.
strateg:ボリュームはフィルタを順番に移動して計算し、一度に移動する距離はstreepと指定できます.
import numpy as np
#import scipy.ndimage as nd 를 통해서도 convolve계산 가능
input = [0, 0, 26, 51, 58, 59, 53, 29, 0, 0, 0]
patch = [-1, 2, -1]
output = np.convolve(input, patch)
print(output)
pooling:特徴を抽出する過程ともいえる.より詳細には、ボリュームから抽出された特徴の特徴を見つけることができる.
from skimage.measure import block_reduce
reduced = block_reduce(combined, (2,2), np.max)
plt.imshow(reduced, cmap="gray");
CNNの長所
実習
#이미지는 32X32X3 형태로 입력됨.
model = Sequential()
model.add(Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
#3X3 filter로 32개의 feature를 뽑겠다.
#파라미터 개수 : (3X3X32) X 3(입력채널) + 32(출력채널 편향)
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary()
# 모델학습방식을 정의함
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 모델 학습시키기
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
model.evaluate(test_images, test_labels)
トランスファラーニング
既存のデータラーニングを再利用できるネットワーク・カリキュラムのライブラリ
使用方法
パラメータを含む層
長所
ResNet
既存のシーケンスモデルとは異なり、接続をスキップしたモデルがあります.
既存のモデルの階層が深ければ深いほど勾配の消失/爆発などの問題が発生しやすくなり、ResNetはより深い階層を作成しても学習が可能になります.
実習
from keras.applications.resnet50 import ResNet50
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from tensorflow.keras import optimizers
# 클래스의 개수 정의 : Cats & Dogs
NUM_CLASSES = 2
# 입력 이미지의 차원 수 : RGB
CHANNELS = 3
# 학습된 네트워크 특징
IMAGE_RESIZE = 224
RESNET50_POOLING_AVERAGE = 'avg'
DENSE_LAYER_ACTIVATION = 'softmax'
OBJECTIVE_FUNCTION = 'categorical_crossentropy'
# 출력 Metric
LOSS_METRICS = ['accuracy']
# EARLY_STOP_PATIENCE < NUM_EPOCHS
NUM_EPOCHS = 10
EARLY_STOP_PATIENCE = 3
train-images / STEPS_PER_EPOCH_TRAINING
STEPS_PER_EPOCH_TRAINING = 10
STEPS_PER_EPOCH_VALIDATION = 10
batching to fill epoch step input
BATCH_SIZE_TRAINING = 100
BATCH_SIZE_VALIDATION = 100
# 테스트 배치의 개수
BATCH_SIZE_TESTING = 1
# 모델 제작
model = Sequential()
# weights = resnet_weights_path 학습해둔 모델이 있으면 이렇게 불러올 수 있음
# include_top=False 기존의 FC를 버리겠다는 뜻
model.add(ResNet50(include_top = False, pooling = RESNET50_POOLING_AVERAGE))
model.add(Dense(NUM_CLASSES, activation = DENSE_LAYER_ACTIVATION))
# 이미 학습된 영역은 학습하지 않겠다고 설정하는 옵션
model.layers[0].trainable = False
# optimizer, compile
sgd = optimizers.SGD(lr = 0.01, decay = 1e-6, momentum = 0.9, nesterov = True)
model.compile(optimizer = sgd, loss = OBJECTIVE_FUNCTION, metrics = LOSS_METRICS)
from keras.applications.resnet50 import preprocess_input
from keras.preprocessing.image import ImageDataGenerator
# 입력 이미지 사이즈 정의
image_size = IMAGE_RESIZE
# 입력 이미지, 데이터 증량(Augmentation)
datagen = ImageDataGenerator(
preprocessing_function=preprocess_input,
featurewise_center=True, # 데이터셋의 평균을 0으로
featurewise_std_normalization=True, # 데이터셋의 std로 나누기
rotation_range=20,
width_shift_range=0.2, #width 결정
height_shift_range=0.2, #height 결정
horizontal_flip=True)
# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
datagen.fit(train_images)
#(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
# 모델 학습 (전이 학습)
model.fit(datagen.flow(train_images, train_labels, batch_size=32),
steps_per_epoch=len(train_images) / 32, epochs=NUM_EPOCHS)
Reference
https://m.blog.naver.com/laonple/221259295035
Reference
この問題について(CNN), 我々は、より多くの情報をここで見つけました https://velog.io/@tjddyd1592/622-CNNテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol