728x90
반응형
import tensorflow as tf
mnist=tf.keras.datasets.cifar10
(x_train, y_train),(x_test, y_test)=mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0 # 모든 픽셀의 숫자를 255.0으로 나누어 각 픽셀을 실수로 바구어 인공신경망에 입력하게 됨
model = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_shape=(32,32,3)),
tf.keras.layers.Conv2D(24,(3,3),(1,1),activation='relu'), # 커널5*5 사이즈 -> stride 2,2
tf.keras.layers.Conv2D(36,(3,3),(1,1),activation='relu'), # 커널7*7 사이즈 -> stride 3,3
tf.keras.layers.Conv2D(48,(3,3),(1,1),activation='relu'),
tf.keras.layers.Conv2D(64,(3,3),(1,1),activation='relu'), # 커널3*3 사이즈 -> stride 1,1
tf.keras.layers.Conv2D(64,(3,3),activation='relu'),# stride 1,1은 생략해도도 됨
tf.keras.layers.MaxPooling2D((2,2)),
tf.keras.layers.Flatten(), #납작하게 해주는 것, 주어진 그림(1164)과 달리 12개가 외부에서 들어감
tf.keras.layers.Dense(100,activation='relu'),
tf.keras.layers.Dense(50,activation='relu'),
tf.keras.layers.Dense(10,activation='softmax')
])
model.summary()
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.save('my_model.h5')
'''
model.layers
model.layers[0]
model.layers[0].get_weights()
model.layers[0].get_weights()[0] ->kernel(weights)
model.layers[0].get_weights()[1] ->bias
model.layers[0].get_weights()[0].shape
model.layers[0].get_weights()[0][...,0] -> filter
'''
import tensorflow as tf
import numpy as np
mnist=tf.keras.datasets.cifar10
_,(x_test,y_test)=mnist.load_data()
model=tf.keras.models.load_model('my_model.h5')
y_pred=model.predict(x_test[1:2])
print(y_pred,np.argmax(y_pred), np.argmax(y_test[1:2]))
import matplotlib.pyplot as plt
# plt.imshow(x_test[1])
# plt.show()
image=x_test[2]
filter=model.layers[0].get_weights()[1][...,4]
# filters=model.layers[0].get_weight()[0]
image_pad=np.pad(image,((1,1),(1,1),(0,0)))
H,W,C=image.shape
convolution=np.zeros((H,W,1))
for row in range(H):
for col in range(W):
window=image_pad[row:row+3, col:col+3]
convolution[row,col]=np.clip(np.sum(window*filter),0,255)
images=[image,convolution]
plt.figure(figsize=(4,2))
for i in range(len(images)):
plt.subplot(1,2,i+1) # 세로, 가로, 위치 순
plt.xticks([])
plt.yticks([])
plt.imshow(images[i])
plt.show()
'''
model.layers
model.layers[0]
model.layers[0].get_weights()
model.layers[0].get_weights()[0]
model.layers[0].get_weights()[1]
model.layers[0].get_weights()[0].shape
model.layers[0].get_weights()[0][...,0]
image.shape
filter.shape # filter=filt
'''
import tensorflow as tf
import numpy as np
mnist=tf.keras.datasets.cifar10
_,(x_test,y_test)=mnist.load_data()
model=tf.keras.models.load_model('my_model.h5')
y_pred=model.predict(x_test[1:2])
print(y_pred, np.argmax(y_pred), np.argmax(y_test[1:2]))
import matplotlib.pyplot as plt
image=x_test[2]
filt=model.layers[0].get_weights()[0][...,-1]
filts=model.layers[0].get_weights()[0]
print(filts.shape) # 1번
image_pad=np.pad(image,((1,1),(1,1),(0,0)))
H,W,C=image.shape
convolution=np.zeros((H,W,24)) # 2번
print(convolution.shape)
for fn in range(24): # 3번
for row in range(H):
for col in range(W):
window=image_pad[row:row+3,col:col+3]
convolution[row,col,fn]=np.sum(window*filts[...,fn]) # 4
images=[]
for idx in range(24):
images.append(convolution[...,idx])
# images.extend([convolution[...,idx]])
# images += [convolution[...,idx]]
# plt.imshow(images[0])
# plt.show()
plt.figure(figsize=(10,5)) #4x6
for i in range(24):
plt.subplot(4,6,i+1)
plt.xticks([])
plt.yticks([])
plt.imshow(images[i], cmap=plt.cm.gray)
plt.show()
728x90
반응형
'즐거운프로그래밍' 카테고리의 다른 글
[딥러닝] VGG16 바탕으로 신경망 구성하기, 배치 정규화, 드롭아웃 적용하기 (0) | 2023.11.02 |
---|---|
[딥러닝] 알렉스넷 바탕으로 신경망 구성하기, 배치 정규화, 드롭아웃 적용하기 (0) | 2023.11.02 |
[딥러닝] CNN 활용 예제(엔비디아 자료 보고 신경망 구성하기) (1) | 2023.11.01 |
[딥러닝] CNN 활용 맛보기 2 (0) | 2023.11.01 |
[딥러닝] CNN 활용 맛보기 1 (1) | 2023.11.01 |