DL之CNN:基于mnist手写数字识别数据集利用DeepConvNet(自定义的深度卷积神经网络【7+1】)模型训练、模型评估、模型预测(从99%→99.4%)
目录
利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别并预测(超过99%)
利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别、模型评估(99.4%)
利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别并预测(超过99%)
输出结果
准确度都在99%以上
1、出错记录
col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))
MemoryError
设计思路
1、网络结构
2、总体框架
核心代码
class DeepConvNet:
def __init__(self, input_dim=(1, 28, 28),
conv_param_1 = {'filter_num':16, 'filter_size':3, 'pad':1, 'stride':1},
conv_param_2 = {'filter_num':16, 'filter_size':3, 'pad':1, 'stride':1},
conv_param_3 = {'filter_num':32, 'filter_size':3, 'pad':1, 'stride':1},
conv_param_4 = {'filter_num':32, 'filter_size':3, 'pad':2, 'stride':1},
conv_param_5 = {'filter_num':64, 'filter_size':3, 'pad':1, 'stride':1},
conv_param_6 = {'filter_num':64, 'filter_size':3, 'pad':1, 'stride':1},
hidden_size=50, output_size=10):
# 初始化权重===========
……
def predict(self, x, train_flg=False):
……
def loss(self, x, t):
……
return acc / x.shape[0]
def gradient(self, x, t):
# forward
self.loss(x, t)
# backward
……
return grads
def save_params(self, file_name="params.pkl"):
……
def load_params(self, file_name="params.pkl"):
……
for i, layer_idx in enumerate((0, 2, 5, 7, 10, 12, 15, 18)):
self.layers[layer_idx].W = self.params['W' + str(i+1)]
self.layers[layer_idx].b = self.params['b' + str(i+1)]
利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别、模型评估(99.4%)
输出结果
设计思路
核心代码
network = DeepConvNet()
network.load_params("data_input/DeepConvNet/deep_convnet_params.pkl")
#T1、caluculate accuracy(float64)
print("DeepConvNet【7+1】 on mnist:caluculate accuracy (float64 type) ... ")
print(network.accuracy(x_test, t_test)) #caluculate accuracy(float64)
#T2、caluculate accuracy(float16)
x_test = x_test.astype(np.float16)
for param in network.params.values():
param[...] = param.astype(np.float16)
print("DeepConvNet【7+1】 on mnist:caluculate accuracy (float16 type) ... ")
print(network.accuracy(x_test, t_test))