■ 컨볼루션 신경망 만들기 (CIFAR-10)

----------------------------------------------------------------------------------------------------

import keras.datasets.cifar10 as cifar10

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

 

outputLayerNodeCount = 10

 

# 학습 및 테스트 데이터를 로드한다.

(trainInputNDArray, trainCorrectOutputNDArray), (testInputNDArray, testCorrectOutputNDArray) = cifar10.load_data()

 

print("학습 입력 배열 형태 : ", trainInputNDArray.shape)

 

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

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

 

trainCorrectOutputNDArray = np_utils.to_categorical(trainCorrectOutputNDArray, outputLayerNodeCount)

testCorrectOutputNDArray  = np_utils.to_categorical(testCorrectOutputNDArray , outputLayerNodeCount)

 

# 입력 데이터를 정규화 한다.

trainInputNDArray = trainInputNDArray.astype("float32")

testInputNDArray  = testInputNDArray.astype("float32")

 

trainInputNDArray /= 255

testInputNDArray  /= 255

 

# 모델을 정의한다.

model = models.Sequential()

 

model.add(convolutional.Conv2D(32, (3, 3), padding = "same", input_shape = (32, 32, 3)))

model.add(core.Activation("relu"))

model.add(convolutional.MaxPooling2D(pool_size = (2, 2)))

model.add(core.Dropout(0.25))

model.add(core.Flatten())

model.add(core.Dense(512))

model.add(core.Activation("relu"))

model.add(core.Dropout(0.5))

model.add(core.Dense(outputLayerNodeCount))

model.add(core.Activation("softmax"))

 

model.summary()

 

# 모델을 컴파일한다.

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

 

# 모델을 학습시킨다.

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

 

# 모델을 평가한다.

print("테스트...")

 

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

 

print("테스트 스코어 : ", scoreList[0])

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

 

# 모델을 저장한다.

json = model.to_json()

 

open("cifar10_model.json", "w").write(json)

 

model.save_weights("cifar10_weights.h5", overwrite = True)

 

 

# 히스토리의 모든 데이터 목록을 표시한다.

print(history.history.keys())

 

# summarize history for accuracy

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()

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker