728x90
728x170
■ 컨볼루션 신경망을 만드는 방법을 보여준다.
▶ 예제 코드 (PY)
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.Conv2D(32, (3, 3), padding = "same"))
model.add(core.Activation("relu"))
model.add(convolutional.MaxPooling2D(pool_size = (2, 2)))
model.add(core.Dropout(0.25))
model.add(convolutional.Conv2D(64, (3, 3), padding = "same"))
model.add(core.Activation("relu"))
model.add(convolutional.Conv2D(64, (3, 3), padding = "same"))
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()
728x90
그리드형(광고전용)
'Python > keras' 카테고리의 다른 글
[PYTHON/KERAS] 컨볼루션 신경망 만들기 (CIFAR-10) (0) | 2018.09.25 |
---|---|
[PYTHON/KERAS] 컨볼루션 신경망 만들기 (MNIST) (0) | 2018.09.24 |
[PYTHON/KERAS] 다층 퍼셉트론 신경망 만들기 (MNIST) (0) | 2018.09.23 |
[PYTHON/KERAS] 순환 신경망 만들기 (나비야) : 상태 유지, 입력 속성 2개 (0) | 2018.08.26 |
[PYTHON/KERAS] 순환 신경망 만들기 (나비야) : 상태 유지, 입력 속성 1개 (0) | 2018.08.26 |
[PYTHON/KERAS] 순환 신경망 만들기 (나비야) (0) | 2018.08.26 |
[PYTHON/KERAS] 컨볼루션 신경망 만들기 (손글씨) : 데이터 확장 (0) | 2018.08.26 |
[PYTHON/KERAS] 컨볼루션 신경망 만들기 (손글씨) (0) | 2018.08.25 |
[PYTHON/KERAS] 다층 퍼셉트론 신경망 만들기 (PIMA) (0) | 2018.08.20 |
[PYTHON/KERAS] Sequential 클래스 : model_from_yaml 메소드를 사용해 모델 구하기 (0) | 2018.08.20 |