- ํํฐ์ ๊ฐ์ ์ด์ฉํด ์ด๋ฏธ์ง๋ฅผ ๋ณํ์ํค๋ ๊ฒ
- ํํฐ์ ํ ๋ถ๋ถ(ex) 2x2, 3x3)์ ์ก์์ ํํฐ์ ๊ฐ ๊ณฑํ ํ ๋ํด์ New pixel value๋ฅผ ์์ฑ
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
model = keras.Sequential([
keras.layers.Conv2D(64, (3,3), activation='relu',
input_shape = (28,28,1)), # ๋ค์ 1 ์ ์ปฌ๋ฌ์ฑ๋์ธ๋ฐ ํ๋ฐฑ์ด๋ฏ๋ก 1 ํ๋๊ฐ ๋ค์ด๊ฐ๋ค
tf.keras.layers.MaxPooling2D(2, 2), # 2 x 2 ํฝ์
์ ์ก์์ ์ต๋๊ฐ์ ๋ฝ์๋ธ๋ค. -> pixel ์ด 1/4์ด ๋จ
tf.keras.layers.Conv2D(64,(3,3),activation='relu'),
tf.keras.layers.MaxPooling2D(2,2).
tf.keras.layers.Flatten(),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
- conv2D ์์ ๋ค์ด์๋ 64, (3,3) ์ ๊ฐ๊ฐ filter, kernal_size ๋ผ ํ๋๋ฐ, filter์ convovlution์ output ๊ฐ์๋ฅผ ์๋ฏธ,kernal_size๋ ์์ 2D convolution window์ ๊ฐ๋ก ์ธ๋ก ๊ธธ์ด๋ฅผ ์๋ฏธํ๋ค.
- ์ output์ ์๊ฐ 64๊ฐ์ธ์ง๋ ์์ง์ ์ ์ ์์...
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.summary()
model.fit(training_images, training_labels, epochs=5)
test_loss = model.evaluate(test_images, test_labels)
f, axarr = plt.subplots(3,5)
3 x 5 ํฌ๊ธฐ์ subplot ์์ฑ
layer_outputs = [layer.output for layer in model.layers] # ์๋ง ๋ ์ด์ด ๊ฐ๊ฐ output ๋ฐํ..
๋ชจ๋ธ ๊ฐ ๋ ์ด์ด ๋ณ output๊ฐ์ layer_outputs์ ์ ์ฅ
activation_model = tf.keras.models.Model(inputs = model.input, outputs =layer_outputs)
for x in range(0,4):
f1 = activation_model.predict(test_images[0].reshape(1,28,28,1))[x] # ์ฒซ๋ฒ์งธ ํ
์คํธ ์ด๋ฏธ์ง๊ฐ ๋ณํ๋ผ์ ๋ค์ด๊ฐ๋ค,
# ๋ฆฌํด์ 4๋ฒ์ ๋ ์ด์ด ํต๊ณผ์ ๋ฐ๋ฅธ output ์ด๋ฏธ์ง
axarr[0,x].imshow(f1[0,:,:,1])
f2 = activation_model.predict(test_images[3].reshape(1,28,28,1))[x]
axarr[1,x].imshow(f2[0,:,:,1])
f3 = activation_model.predict(test_images[6].reshape(1,28,28,1))[x]
axarr[2,x].imshow(f3[0,:,:,1])
axarr[0,4].imshow(test_images[0])
axarr[1,4].imshow(test_images[3])
axarr[2,4].imshow(test_images[6])
plt.show()
์์์ ๋ง๋ subplot ์๋ค ๊ณผ์ ๋ณ layer output ์ด๋ฏธ์ง ์ ์ฅ
import cv2
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
i = misc.ascent()
์ด๋ฏธ์ง ๋ถ๋ฌ์ด
plt.subplot(1,4,1)
plt.gray()
plt.axis('off')
plt.imshow(i)
์ฒซ๋ฒ์จฐ subplot ์๋ค๊ฐ misc.ascent()์์ ๊ฐ์ ธ์จ ์ด๋ฏธ์ง ๋ฃ์ด์ค๋ค
i_transformed = np.copy(i)
size_x = i_transformed.shape[0]
size_y = i_transformed.shape[1]
- i_transformed ์ ๊ทธ๋ฆผ ๋ณต์ฌํด์ ์ ์ฅ
- ๊ทธ๋ฆผ์ ๊ฐ๋ก ์ธ๋ก ์ ์ฅํด๋
filter = [[[-1, -2, -1], [0, 0, 0], [1, 2, 1]],
[[0, 1, 0], [1, -4, 1], [0, 1, 0]],
[[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]]
ํํฐ๋งํ ๋ ๋ค์ด๊ฐ ๊ฐ์ข ํํฐ 3์ข ๋ฅ
weight = 1
์ด ์์์์๋ weight๋ ์๊ด์์ผ๋ฏ๋ก 1๋ก ๋
for k in range(3):
plt.subplot(1, 4, k+2)
i_transformed = np.copy(i)
for x in range(1,size_x-1):
for y in range(1,size_y-1):
convolution =0.0
convolution = convolution + (i[x - 1, y-1] * filter[k][0][0])
convolution = convolution + (i[x, y-1] * filter[k][0][1])
convolution = convolution + (i[x + 1, y-1] * filter[k][0][2])
convolution = convolution + (i[x-1, y] * filter[k][1][0])
convolution = convolution + (i[x, y] * filter[k][1][1])
convolution = convolution + (i[x+1, y] * filter[k][1][2])
convolution = convolution + (i[x-1, y+1] * filter[k][2][0])
convolution = convolution + (i[x, y+1] * filter[k][2][1])
convolution = convolution + (i[x+1, y+1] * filter[k][2][2])
convolution = convolution * weight
if(convolution<0):
convolution = 0
if(convolution>255):
couvolution = 255
i_transformed[x,y] = convolution
plt.imshow(i_transformed)
plt.show()
