IT's 우

생활코딩 머신러닝야학_Tensorflow 102 - 이미지 분류(CNN) - 내 이미지 사용하기 본문

생활코딩/머신러닝(텐서플로우(python))

생활코딩 머신러닝야학_Tensorflow 102 - 이미지 분류(CNN) - 내 이미지 사용하기

디우 2021. 1. 20. 02:03
728x90

# 샘플로 이미지 다운, 압축해제

!wget -q https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/notMNIST_small.tar.gz

!tar -xzf notMNIST_small.tar.gz

 

# 이미지 읽어서 데이터 준비하기

import glob

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

 

#경로명을 가져오기

paths = glob.glob('./notMNIST_small/*/*.png')

#경로들을 랜덤 하게 섞기

paths = np.random.permutation(paths)

#파일 경로에 가서 이미지 읽어 들이기

독립 = np.array([plt.imread(paths[i]) for i in range(len(paths))])

#정답을 가져오기

종속 = np.array([paths[i].split('/')[2] for i in range(len(paths))])

print(독립.shape, 종속.shape)

 

# 학습시킬 수 있는 형태의 데이터로 변경하기

# 이미지 한 장을 3차원으로 바꾸어주기 위해

독립 = 독립.reshape(18724, 28,28,1)

#원핫인코딩

종속 = pd.get_dummies(종속)

print(독립.shape, 종속.shape)

 

 

import tensor flow as tf

# 모델을 완성합니다.

X = tf.keras.layers.Input(shape=[28, 28, 1])

H = tf.keras.layers.Conv2D(6, kernel_size=5, padding='same', activation='swish')(X)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Conv2D(16, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(120, activation='swish')(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)

model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

 

 

# 모델을 학습
model.fit(독립, 종속, epochs=10)

 

# 정답 확인

종속[0:10]

 

 

#이미지 확인

plt.imshow(독립[3], cmap='gray')

 

 

 

 

 

 

 

 

전체 소스코드

 

###########################
# 라이브러리 로딩
import glob
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf

###########################
# 이미지 읽어서 데이터 준비하기
paths = glob.glob('./notMNIST_small/*/*.png')
paths = np.random.permutation(paths)
독립 = np.array([plt.imread(paths[i]) for i in range(len(paths))])
종속 = np.array([paths[i].split('/')[-2] for i in range(len(paths))])
print(독립.shape, 종속.shape)

독립 = 독립.reshape(18724, 28, 28, 1)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)

###########################
# 모델을 완성합니다.
X = tf.keras.layers.Input(shape=[28, 28, 1])

H = tf.keras.layers.Conv2D(6, kernel_size=5, padding='same', activation='swish')(X)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Conv2D(16, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(120, activation='swish')(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)

model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

###########################
# 모델을 학습
model.fit(독립, 종속, epochs=10)

###########################
# 모델을 이용합니다.
pred = model.predict(독립[0:5])
pd.DataFrame(pred).round(2)

# 정답 확인
종속[0:5]

# 모델 확인
model.summary()

 

 

 

 

 

 

 

 

 

출처 : 생활코딩 www.opentutorials.org/module/5268/29793

728x90
반응형