• 大小: 16.25MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-01
  • 语言: Python
  • 标签: Python实现  

资源简介

自己编写的MNIST手写字Python实现,相关介绍http://blog.csdn.net/hoho1151191150/article/details/79583879

资源截图

代码片段和文件信息

“““
gnetwork.py
~~~~~~~~~~
采用随机梯度法进行前馈神经网络训练的模块,梯度训练使用BP算法
该程序为练习所写,简单易懂。
相关介绍参见:http://blog.csdn.net/hoho1151191150/article/details/79583879
“““
#### Libraries
# Standard library
import random
# Third-party libraries
import numpy as np

class gNetwork(object):

    def __init__(self sizes):
    “““
    sizes:list类型,表示网络结构,比如[231]表示输入层2个神经元,
    一个包含3个神经元的隐层,1个输出层
    “““
        self.num_layers = len(sizes)
        self.sizes = sizes
#初始化网络
        self.biases = [np.random.randn(y 1) for y in sizes[1:]]
        self.weights = [np.random.randn(y x)
                        for x y in zip(sizes[:-1] sizes[1:])]
        #为了方便代码编写,weights和biases与网络结构相同,输入层为空即可
        self.biases.insert(0[])
        self.weights.insert(0[])
        self.accuracy=[];

    def feedforward(selfaz):
        “““Return the output of the network“““
#z=w*x+b,a=sigma(z)
        for ik in range(1self.num_layers):
            z[ik] = np.dot(self.weights[ik] a[ik-1])+self.biases[ik]
            a[ik] = sigmoid(z[ik])

    def SGD(self training_data epochs mini_batch_size etatest_data=None):
#中间变量,weights和biases的导数,以及激活值a和带权输入z
        nabla_biases = self.biases[:]
        nabla_weights = self.weights[:]
        a = [[] for i in range(self.num_layers)]
        z = [[] for i in range(self.num_layers)]
        #测试数据
        if test_data: 
            n_test = len(test_data)
            x_test = np.squeeze(np.array([d[0] for d in test_data]).transpose())
            y_test = np.squeeze(np.array([d[1] for d in test_data]).transpose())
        
        n = len(training_data)
#主循环
        for j in range(epochs):
            #对样本数据随机排列
            random.shuffle(training_data)
#mini_batch
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0 n mini_batch_size)]
            
            for mini_batch in mini_batches:
#将tuple的数据处理成矩阵形式,这样可以一次计算所有的mini_batch
#比在mini_batch中循环单个样本快很多
                x_train = np.squeeze(np.array([x[0] for x in mini_batch])).transpose()
                y_train = np.squeeze(np.array([y[1] for y in mini_batch])).transpose()
                a[0] = x_train
                #前馈
self.feedforward(az)
#反向传播误差,并更新模型
                self.update_mini_batch(y_trainaznabla_weightsnabla_biasesmini_batch_sizeeta)
            
            if test_data:
                yp = self.evaluate(x_testy_test)
                self.accuracy.append(yp/n_test)
                print(“Epoch {%d}: {%d} / {%d}“ %(j self.evaluate(x_testy_test) n_test))
            else:
                print(“Epoch {%d} complete“ %(j))

    def update_mini_batch(selfy_trainaznabla_weightsnabla_biasesmini_batch_sizeeta):
        #计算输出层,公式BP1
        delta = (a[-1]-y_train)*sigmoid_prime(z[-1])
        nabla_biases[-1][:0] = np.mean(deltaaxis = 1)
        nabla_weights[-1] = np.dot(deltaa[-2].transpose

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-03-17 11:51  神经网络学习(七)MNIST Python程序\
     目录           0  2018-03-17 10:33  神经网络学习(七)MNIST Python程序\data\
     文件    17051982  2018-01-27 02:42  神经网络学习(七)MNIST Python程序\data\mnist.pkl.gz
     目录           0  2018-03-17 11:20  神经网络学习(七)MNIST Python程序\fig\
     文件       15308  2018-03-17 12:23  神经网络学习(七)MNIST Python程序\fig\arch30-mini-10-eta3.png
     文件       16672  2018-03-17 11:12  神经网络学习(七)MNIST Python程序\fig\arch30-mini-15-eta3.png
     目录           0  2018-03-17 11:45  神经网络学习(七)MNIST Python程序\src\
     文件        4533  2018-03-17 13:02  神经网络学习(七)MNIST Python程序\src\gnetwork.py
     文件        3573  2018-02-26 16:27  神经网络学习(七)MNIST Python程序\src\mnist_loader.py
     文件        6939  2018-03-17 10:55  神经网络学习(七)MNIST Python程序\src\network.py
     文件         942  2018-03-17 12:01  神经网络学习(七)MNIST Python程序\src\test.py
     目录           0  2018-03-17 11:19  神经网络学习(七)MNIST Python程序\src\__pycache__\
     文件        4463  2018-03-17 11:19  神经网络学习(七)MNIST Python程序\src\__pycache__\gnetwork.cpython-36.pyc
     文件        4041  2018-03-17 10:47  神经网络学习(七)MNIST Python程序\src\__pycache__\mnist_loader.cpython-36.pyc
     文件        7220  2018-03-17 11:03  神经网络学习(七)MNIST Python程序\src\__pycache__\network.cpython-36.pyc

评论

共有 条评论