import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing import image
from tensorflow.python.keras.models import load_model
Path = '경로'
model = load_model('모델')
WARNING:tensorflow:From <ipython-input-6-c3c078cb0bd4>:13: Sequential.predict_classes (from tensorflow.python.keras.engine.sequential) is deprecated and will be removed after 2021-01-01. Instructions for updating: Please use instead:* `np.argmax(model.predict(x), axis=-1)`,
if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`,
if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
predict_classes 대신
출력 활성화 함수에 softmax를 사용하는 다중분류인 경우 np.argmax(model.predict(x))를
출력 활성화 함수에 sigmoid를 사용하는 이진분류인 경우 model.predict(x)>0.5를 사용하라는데
np.argmax의 경우 원-핫 인코딩을 하게해주는 함수로 가장 높은 요소의 index를 반환해 줍니다
x_train=np.concatenate([trainGen.next()[0] for i in range(trainGen.__len__())])
y_train=np.concatenate([trainGen.next()[1] for i in range(trainGen.__len__())])
x_val=np.concatenate([validationGen.next()[0] for i in range(validationGen.__len__())])
y_val=np.concatenate([validationGen.next()[1] for i in range(validationGen.__len__())])
확실히 transfer learning을 이용하니 초반부터 높은 정확도와 낮은 손실이 나옴을 볼 수 있습니다
testGenerator = ImageDataGenerator(
rescale=1./255
)
testGen = testGenerator.flow_from_directory(
os.path.join(Path, 'test_set'),
target_size=size[0:1],
shuffle=False,
)
x_test=np.concatenate([testGen.next()[0] for i in range(testGen.__len__())])
y_test=np.concatenate([testGen.next()[1] for i in range(testGen.__len__())])
def Augmentation(num_random_sample=5, num_range=3):
random_idxs = np.random.randint(batch_size, size=num_random_sample)
plt.figure(figsize=(num_random_sample*3, num_range*4))
for i in range(num_range):
img = trainGen.next()
for j, ran in enumerate(random_idxs):
plt.subplot(num_range, len(random_idxs), i*len(random_idxs)+j+1)
plt.imshow(img[0][j])
next()가 한번 일어날 때마다 batch_size만큼의 데이터를 가져오므로
num_random_sample의 값은 batch_size보다 작거나 같아야 합니다
가용 메모리가 작아서 batch_size가 작은 경우
num_random_sample을 줄이고 num_range를 늘려보자
Augmentation()
셀을 반복 실행하면 또 다른 데이터가 나옵니다
이와 같이 ImageDataGenerator를 이용하여 증폭시킨 데이터들을 확인해보고
쓸만한 인수로 수정하여 넣는 것을 추천한다
+ 추가
궁금하던 것이
그래서 ImageDataGenerator를 통해 몇 개의 데이터가 더 생성되는 것일까?인데
x_train=np.concatenate([trainGen.next()[0] for i in range(trainGen.__len__())]) y_train=np.concatenate([trainGen.next()[1] for i in range(trainGen.__len__())])
import tensorflow as tf
from tensorflow.keras.datasets.mnist import load_data
from tensorflow.keras.models import Sequential
from tensorflow.keras import models
from tensorflow.keras.layers import Dense, Input, Flatten
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.utils import plot_model
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
# mnist 불러오기
(x_train_full, y_train_full),(x_test, y_test) = load_data(path='mnist.npz')
# training data (70%), validation data (30%) 구분
x_train, x_val, y_train, y_val = train_test_split(x_train_full, y_train_full, test_size=0.3)