분류 전체보기
- 주제 토론 : kNN 2018.11.05
- CNN 이용 분류 예제 소스 2018.10.24
- time series binary classification data 2018.10.22
- 6번째 수업 slides 2018.10.20
- 주제 토론: Random Forest 2018.10.20
- 5번째 강의 자료 2018.10.14
- 주제 발표 2 (Naïve Bayes Classification) 2018.10.14
- Load_model 실습 예제 2018.10.10
- 모델 저장 실습, diabetes with tracking graph and dropout 2018.10.10
- MLP 실습 diabetes (missing part) 2018.10.09
주제 토론 : kNN
CNN 이용 분류 예제 소스
CNN 실습 소스 코드 입니다. (from learnopencv.com )
cifar10 이미지 분류 dataset 대상
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from __future__ import print_function
import keras
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten
from keras.datasets import cifar10
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()
from keras.utils import to_categorical
print('Training data shape : ', train_images.shape, train_labels.shape)
print('Testing data shape : ', test_images.shape, test_labels.shape)
# Find the unique numbers from the train labels
classes = np.unique(train_labels)
nClasses = len(classes)
print('Total number of outputs : ', nClasses)
print('Output classes : ', classes)
plt.figure(figsize=[4,2])
# Display the first image in training data
plt.subplot(121)
plt.imshow(train_images[0,:,:], cmap='gray')
plt.title("Ground Truth : {}".format(train_labels[0]))
# Display the first image in testing data
plt.subplot(122)
plt.imshow(test_images[0,:,:], cmap='gray')
plt.title("Ground Truth : {}".format(test_labels[0]))
# Find the shape of input images and create the variable input_shape
nRows,nCols,nDims = train_images.shape[1:]
train_data = train_images.reshape(train_images.shape[0], nRows, nCols, nDims)
test_data = test_images.reshape(test_images.shape[0], nRows, nCols, nDims)
input_shape = (nRows, nCols, nDims)
# Change to float datatype
train_data = train_data.astype('float32')
test_data = test_data.astype('float32')
# Scale the data to lie between 0 to 1
train_data /= 255
test_data /= 255
# Change the labels from integer to categorical data
train_labels_one_hot = to_categorical(train_labels)
test_labels_one_hot = to_categorical(test_labels)
def createModel():
model = Sequential()
# The first two layers with 32 filters of window size 3x3
model.add(Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=input_shape))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(nClasses, activation='softmax'))
return model
model1 = createModel()
batch_size = 256
epochs = 50
model1.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model1.summary()
history = model1.fit(train_data, train_labels_one_hot, batch_size=batch_size, epochs=epochs, verbose=1,
validation_data=(test_data, test_labels_one_hot))
model1.evaluate(test_data, test_labels_one_hot)
plt.figure(figsize=[8,6])
plt.plot(history.history['loss'],'r',linewidth=3.0)
plt.plot(history.history['val_loss'],'b',linewidth=3.0)
plt.legend(['Training loss', 'Validation Loss'],fontsize=18)
plt.xlabel('Epochs ',fontsize=16)
plt.ylabel('Loss',fontsize=16)
plt.title('Loss Curves',fontsize=16)
plt.figure(figsize=[8,6])
plt.plot(history.history['acc'],'r',linewidth=3.0)
plt.plot(history.history['val_acc'],'b',linewidth=3.0)
plt.legend(['Training Accuracy', 'Validation Accuracy'],fontsize=18)
plt.xlabel('Epochs ',fontsize=16)
plt.ylabel('Accuracy',fontsize=16)
plt.title('Accuracy Curves',fontsize=16)
time series binary classification data
time series binary classification.
Home assignment용 데이터 (자세한 사항은 수업시간에 설명하겠습니다.)
출처: Alcoholism EEG dataset from UCI machine learning data repository
TR_allTrialEEGavgGlobalNormLabeled.csv.zip
6번째 수업 slides
6번째 수업 자료 입니다.
주제 토론: Random Forest
5번째 강의 자료
5번째 강의 슬라이드 입니다.
주제 발표 2 (Naïve Bayes Classification)
오늘 주제 발표 2 (Naïve Bayes Classification)에 사용된 슬라이드와 예제 소스코드 입니다.
발표자: 윤빛나리
20181012_Naive Bayes Classifier_YUN.pdf
Load_model 실습 예제
1. 하드에 있는 모델을 로딩하자
2. 로딩된 모델에 새로운 테스트 데이터를 입력하여 예측값을 얻어보자.
3. 이 소스에서는 학습을 수행하지 않고 이미 학습된 모델을 로딩하여 이용하는 것을 확인하자.
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
np.random.seed(5)
dataset = np.loadtxt("diabetes.csv", delimiter=",", skiprows = 1)
data_test = dataset[700:, 0:8]
label_test = dataset[700:, 8]
#data_test = data_test(768,8).astype('float32')
label_test = np_utils.to_categorical(label_test)
# load model
from keras.models import load_model
model = load_model('diabetes_mlp_model.h5')
# use the model
label_pred = model.predict_classes(data_test)
for i in range(30):
print("Input: ",data_test[i,:]," Predict:"+str(label_pred[i]))
모델 저장 실습, diabetes with tracking graph and dropout
1. 아래 코드를 입력하여 epoch 별 학습 상태를 그래프로 확인하자.
2. 저장된 모델 파일의 존재를 확인하고 모델 파일을 loading하여 새로운 테스트 데이터를 입력하여 prediction을 수행하자.
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
np.random.seed(5)
dataset = np.loadtxt("diabetes.csv", delimiter=",", skiprows = 1)
# split
data_val = dataset[500:, 0:8]
label_val = dataset[500:, 8]
data_train = dataset[:700, 0:8]
label_train = dataset[:700, 8]
data_test = dataset[700:, 0:8]
label_test = dataset[700:, 8]
# shuffle
train_rand_idxs = np.random.choice(700, 600)
val_rand_idxs = np.random.choice(268, 260)
data_train = data_train[train_rand_idxs]
label_train = label_train[train_rand_idxs]
data_val = data_val[val_rand_idxs]
label_val = label_val[val_rand_idxs]
# convert labels to one-hot representation
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(8, activation = 'relu'))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
hist = model.fit(data_train, label_train, epochs = 150, batch_size = 64, validation_data=(data_val, label_val))
scores = model.evaluate(data_test, label_test)
print("%s: %.2f%%" %(model.metrics_names[1], scores[1]*100))
# save the trained model into file
#from keras.models import load_model
#model.save('diabetes_mlp_model.h5')
# show the learning process
%matplotlib inline
import matplotlib.pyplot as plt
fig, loss_ax = plt.subplots()
acc_ax = loss_ax.twinx()
loss_ax.plot(hist.history['loss'], 'y', label='train loss')
loss_ax.plot(hist.history['val_loss'], 'r', label='val loss')
acc_ax.plot(hist.history['acc'], 'b', label='train acc')
acc_ax.plot(hist.history['val_acc'], 'g', label='val acc')
loss_ax.set_xlabel('epoch')
loss_ax.set_ylabel('loss')
acc_ax.set_ylabel('accuracy')
loss_ax.legend(loc='upper left')
acc_ax.legend(loc='lower left')
plt.show()
MLP 실습 diabetes (missing part)
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
np.random.seed(5)
dataset = np.loadtxt("diabetes.csv", delimiter=",", skiprows = 1)
data_train = dataset[:700, 0:8]
label_train = dataset[:700, 8]
data_test = dataset[700:, 0:8]
label_test = dataset[700:, 8]
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation = 'relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(data_train, label_train, epochs = 150, batch_size = 64)
scores = model.evaluate(data_test, label_test)
print("%s: %.2f%%" %(model.metrics_names[1], scores[1]*100))