• 神经网络学习笔记1



    1、矩阵乘积
    A=np.array([[1,2],[3,4]])
    B=np.array([[5,6],[7,8]])
    np.dot(A,B)
    必须要使得矩阵中对应维度的元素个数一致
    神经网络中就是通过乘积进行神经网络的运算

    2、简单的三层神经网络实现(入门)

    ※层与层间进行乘积运算

    使用了Numpy多维数组,高效地实现了神经网络。

    其中定义了init_network()和forward()函数,init_network()函数会进行权重和偏置的初始化,并将它们保存在字典变量network[]中。forward()函数则封装了将输入信号转换为输出信号的处理过程。

    代码实现如下,此时神经网络的前向处理就完成了。

    # coding: utf-8
    import sys, os
    sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
    import pickle
    import numpy as np
    from collections import OrderedDict
    from common.layers import *
    from common.gradient import numerical_gradient
    
    def init_network():
        network = {}
        #第一层
        network['W1']=np.array([[1.0,0.3,0.5],[0.2,0.4,0.6]]) #第一层权重
        network['b1']=np.array([0.1,0.2,0.3]) #偏置
        #第二层
        network['W2']=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]]) #第二层权重
        network['b2']=np.array([0.1,0.2])
        #第三层
        network['W3']=np.array([[0.1,0.3],[0.2,0.4]])
        network['b3']=np.array([0.1,0.2])
    
        return network
    
    def forward(network,x):
        W1,W2,W3=network['W1'],network['W2'],network['W3']
        b1,b2,b3=network['b1'],network['b2'],network['b3']
    
        a1=np.dot(x,W1)+b1 #对第一层进行乘积运算
        z1=sigmoid(a1)
    
        a2=np.dot(z1,W2)+b2
        z2=sigmoid(a2)
    
        a3=np.dot(z2,W3)+b3
        y=identity_function(a3)
    
        return y
    
    network=init_network()
    x=np.array([1.0,0.5])
    y=forward(network,x)
    
    print(y)

    通过使用对mnist数据集实现神经网络推理处理。

    函数要分为get_data()、init_network、preditct()三个函数

    正规化处理:把load_mnist函数参数normalize设置为true,函数内部进行转换,将图像各个像素值除以255,使得数据在0.0~1.0之内

    具体函数作用见注释

     1 # coding: utf-8
     2 import sys, os
     3 sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
     4 import numpy as np
     5 import pickle
     6 from dataset.mnist import load_mnist
     7 from common.functions import sigmoid, softmax
     8 
     9 #读入数据
    10 def get_data():
    11     (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False)
    12     return x_test, t_test
    13 
    14 #读入保存在pickle文件中学习到的权重参数
    15 def init_network():
    16     with open("sample_weight.pkl", 'rb') as f:
    17         network = pickle.load(f)
    18     return network
    19 
    20 #将参数取出,定义神经网络
    21 def predict(network, x):
    22     W1, W2, W3 = network['W1'], network['W2'], network['W3']
    23     b1, b2, b3 = network['b1'], network['b2'], network['b3']
    24 
    25     a1 = np.dot(x, W1) + b1
    26     z1 = sigmoid(a1)
    27     a2 = np.dot(z1, W2) + b2
    28     z2 = sigmoid(a2)
    29     a3 = np.dot(z2, W3) + b3
    30     y = softmax(a3)
    31 
    32     return y
    33 
    34 
    35 x, t = get_data() #获取mnist数据集
    36 network = init_network() #生成网络
    37 accuracy_cnt = 0
    38 
    39 # 使用for语句逐一取出保存于x中的图像数据,使用predict()函数进行分类
    40 # predict()函数使用numpy数组形式输出各个标签对应概率,使用概率列表中最大值索引作为预测结果
    41 for i in range(len(x)):
    42     y = predict(network, x[i])
    43     print(y)
    44     p= np.argmax(y) # 获取概率最高的元素的索引
    45     if p == t[i]:
    46         accuracy_cnt += 1
    47 
    48 print("Accuracy:" + str(float(accuracy_cnt) / len(x))) #比较神经网络预测答案与正确解标签,将回答正确概率作为识别精度

    代码结果截图如下:

  • 相关阅读:
    DFS
    关于memset

    SpringCloud(六)Ribbon负载均衡
    每日算法练习(2020-1-27)
    SpringCloud(五)Eureka Server高可用集群与常见问题
    SpringCloud(四)Eureka服务注册与发现
    SpringCloud(三)常用系统架构技术讲解
    Redis(八)
    Redis(七)
  • 原文地址:https://www.cnblogs.com/AKsnoopy/p/13460887.html
Copyright © 2020-2023  润新知