不用深度学习框架,利用Python3实现神经网络。
Michael Nielsen神经网络与深度学习mnist代码的Python3版本,并在代码中做了详细注释。
定义一个神经网络
定义一个神经网络类,在类方法中,最重要的是梯度下降法中的,即SGD
#! /usr/bin/env python3
#coding=utf-8
'''
net_work.py
~~~~~~~~~~~~~
手写神经网络
'''
#### libraries
# standard libraries
import random
# third-party library
import numpy as np
class Network(object):
'''
定义一个神经网络
'''
def __init__(self,sizes):
'''
初始化层
:param sizes: each layer`s cell number
'''
self.num_layers=len(sizes)
self.size=sizes
self.W=[np.random.randn(y,x)
for x,y in zip(sizes[:-1],sizes[1:])]
self.B=[np.random.randn(x,1)
for x in sizes[1:]]
def SGD(self,train_data,eta,mini_batch_size,epoches,test_data=None):
'''
随机梯度下降法
:param train_data:
:param eta: 学习率
:param mini_batch_size: 小批量规模
:param epoches: 迭代周期
:param test_data:
:return: w,b
'''
n_train=len(train_data)
#开始迭代
for i in range(epoches):