# coding=utf-8

import os
import sys
sys.path.append(os.pardir)  # 为了导入父目录中的文件而进行的设定

import numpy as np

from deep_convnet import DeepConvNet
from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)

network = DeepConvNet()
network.load_params('deep_convnet_params.pkl')

sampled = 10000  # 加快速度
x_test = x_test[:sampled]
t_test = t_test[:sampled]

print('calculate accuracy (float64)...')
print(network.accuracy(x_test, t_test))

# 转换为 float16 类型
x_test = x_test.astype(np.float16)
for param in network.params.values():
    param[...] = param.astype(np.float16)

print('calculate accuracy (float16)...')
print(network.accuracy(x_test, t_test))
# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 부모 디렉터리의 파일을 가져올 수 있도록 설정
import numpy as np
import matplotlib.pyplot as plt
from deep_convnet import DeepConvNet
from dataset.mnist import load_mnist


(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)

network = DeepConvNet()
network.load_params("deep_convnet_params.pkl")

sampled = 10000 # 고속화를 위한 표본추출
x_test = x_test[:sampled]
t_test = t_test[:sampled]

print("caluculate accuracy (float64) ... ")
print(network.accuracy(x_test, t_test))

# float16(반정밀도)로 형변환
x_test = x_test.astype(np.float16)
for param in network.params.values():
    param[...] = param.astype(np.float16)

print("caluculate accuracy (float16) ... ")
print(network.accuracy(x_test, t_test))
#                  evaluate_sample_num_per_epoch=1000)
#trainer.train()

# Save Network parameters
# network.save_params("params.pkl")
# print("Saved Network Parameters!")

# Load Network parameters
network.load_params("deep_convnet_params.pkl")
print('deep_conv_net_params.pkl is loaded!')

# accuracy calculation
train_acc_list = []
test_acc_list = []
print('accuracy calculation is in progress...')
train_acc = network.accuracy(x_train, t_train)
test_acc = network.accuracy(x_test, t_test)

train_acc_list.append(train_acc)
test_acc_list.append(test_acc)
print('accuracy calculation is complete.')

# グラフの描画
markers = {'train': 'o', 'test': 's'}
x = np.arange(1)
plt.plot(x, train_acc_list, marker='o', label='train', markevery=2)
plt.plot(x, test_acc_list, marker='s', label='test', markevery=2)
plt.xlabel("epochs")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
plt.legend(loc='lower right')
Exemplo n.º 4
0
import numpy as np
import matplotlib.pyplot as plt
from make_dataset import load_mydata
from deep_convnet import DeepConvNet

network = DeepConvNet()

(x_train, t_train), (x_test, t_test) = load_mydata(flatten=False)

network.load_params(file_name='deep_convnet_params.pkl')
print(network.accuracy(x_test, t_test, batch_size=10))
MNIST를 학습하는 다음과 같은 신경망을 구성한다.
C : Conv, R : ReLU, P : Pooling, A : Affine, D : Dropout, S : Softmax
→ C16→R→C16→R→P → C32→R→C32→R→P → C64→R→C64→R→P → A→R→D → A→D→S →
C 계층의 필터는 3*3, 숫자는 채널의 수
풀링 계층을 추가하여 중간 데이터의 공간 크기를 줄여간다. 마지막 완전연결계층에서는 드롭아웃을 사용
가중치 초깃값은 He, 가중치 매개변수 갱신에는 Adam을 사용.
구현 코드는 deep_convnet.py 참고, 훈련 코드는 deepnet.py 참고.
"""

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)

network = DeepConvNet()
# 학습에 긴 시간이 걸리므로 미리 학습한 결과를 pkl로 배포
network.load_params('deep_convnet_params.pkl')

print(network.accuracy(x_test, t_test))  # 0.9935
# 99.35% 인식률을 보인다. 어떤 이미지를 인식하지 못했는지는 misclassified_mnist.py 참고

# 8.1.2 정확도를 더 높이려면
"""
NOTE : MNIST는 상대적으로 단순하기 때문에 층을 깊게 하지 않고도 좋은 결과가 나오지만
대규모 일반 사물 인식에 대해서는 층을 깊게 하면 얻는 정확도가 크다.

데이터 확장data augmentation : 훈련 이미지를 알고리즘을 이용해 인위적으로 늘린다.
이미지 회전, 이동, crop, flip, 확대, 축소, 밝기 등을 변경한다.
"""

# 8.1.3 깊게 하는 이유
"""
층의 깊이에 비례해 정확도가 높아지는 경향이 있다.
층을 깊게하면 신경망의 매개변수 수가 줄어들며, 적은 매개변수로 같은 수준의 표현력을 얻을 수 있다.