첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170
import keras.backend as backend
import keras.datasets.mnist as mnist
import keras.layers.convolutional as convolutional
import keras.layers.core as core
import keras.models as models
import keras.utils.np_utils as np_utils
import matplotlib.pyplot as pp
import numpy as np

np.random.seed(1671)

backend.set_image_dim_ordering("th")

outputLayerNodeCount = 10

# 학습 및 테스트 데이터를 로드한다.
(trainInputNDArray, trainCorrectOutputNDArray), (testInputNDArray, testCorrectOutputNDArray) = mnist.load_data()

trainInputNDArray = trainInputNDArray.astype("float32")
testInputNDArray  = testInputNDArray.astype("float32")

# 입력 데이터를 정규화 한다.
trainInputNDArray /= 255
testInputNDArray  /= 255

# 60000개×[1×28×28] 형태의 입력을 CONVNET에 전달
trainInputNDArray = trainInputNDArray[:, np.newaxis, :, :]
testInputNDArray  = testInputNDArray[:, np.newaxis, :, :]

print(trainInputNDArray.shape[0], "학습 샘플 데이터")
print(testInputNDArray.shape[0] , "테스트 샘플 데이터")

# 범주 벡터를 이진 범주 행렬로 변환한다.
trainCorrectOutputNDArray = np_utils.to_categorical(trainCorrectOutputNDArray, outputLayerNodeCount)
testCorrectOutputNDArray  = np_utils.to_categorical(testCorrectOutputNDArray , outputLayerNodeCount)

# 모델을 정의한다.
model = models.Sequential()

model.add(convolutional.Conv2D(20, kernel_size = 5, padding = "same", input_shape = (1, 28, 28)))
model.add(core.Activation("relu"))
model.add(convolutional.MaxPooling2D(pool_size = (2, 2), strides = (2, 2)))
model.add(convolutional.Conv2D(50, kernel_size = 5, padding = "same"))
model.add(core.Activation("relu"))
model.add(convolutional.MaxPooling2D(pool_size = (2, 2), strides = (2, 2)))
model.add(core.Flatten())
model.add(core.Dense(500))
model.add(core.Activation("relu"))
model.add(core.Dense(outputLayerNodeCount))
model.add(core.Activation("softmax"))

model.compile(loss = "categorical_crossentropy", optimizer = "adam", metrics = ["accuracy"])

history = model.fit(trainInputNDArray, trainCorrectOutputNDArray, batch_size = 128, epochs = 1, verbose = 1, validation_split = 0.2)

scoreList = model.evaluate(testInputNDArray, testCorrectOutputNDArray, verbose = 1)

print("")
print("테스트 스코어 : ", scoreList[0])
print("테스트 정확도 : ", scoreList[1])

# 히스토리의 모든 데이터 목록을 표시한다.
print(history.history.keys())

# 정확도 히스토리를 표시한다.
pp.plot(history.history["acc"    ])
pp.plot(history.history["val_acc"])
 
pp.title("model accuracy")
pp.ylabel("accuracy")
pp.xlabel("epoch")
pp.legend(["train", "test"], loc = "upper left")
 
pp.show()
 
# 손실 히스토리를 표시한다.
pp.plot(history.history["loss"    ])
pp.plot(history.history["val_loss"])
 
pp.title("model loss")
pp.ylabel("loss")
pp.xlabel("epoch")
pp.legend(["train", "test"], loc = "upper left")
 
pp.show()
728x90
반응형
그리드형(광고전용)
Posted by icodebroker
TAG , ,

댓글을 달아 주세요