首页 > 其他分享 >4.9软工日报(神经网络

4.9软工日报(神经网络

时间:2023-04-09 22:57:55浏览次数:33  
标签:函数 img sigmoid 软工 4.9 神经网络 np import network

跟着书学了神经网络的一些最最最基本的内容,首先安装了numpy库,还有matplotlib库,第二个库是用来绘图用的。

其次还安装了

 

 这两个软件包用于将numpy数组的图片转化成其他维度和形状,当然还有很多其他功能,安装完这些库就够用了。

首先神经网络大致可分为三层,输入层,中间层和输出层,中间层可以有若干层。每一次都有若干个神经元。(神经网络的模型基于感知机。

相邻两层的神经元之间的箭头上面的w代表权重,神经元b代表的是偏置。

对于感知机来说,权重和加上偏置若大于0就返回1,若小于等于0就返回0.

接着是激活函数。激活函数的作用是将输入信号的总和转化为输出信号。神经元和节点含义相同。

对于激活函数而言,先介绍阶跃函数和sigmoid函数。阶跃函数以阈值为界,一旦输出超过阈值就切换输出。可以说感知机就使用了阶跃函数。

其次是sigmoid函数。h(x) = 1 / 1 + exp(-x) //在这里exp(x)函数的作用就是e的x次方。

import numpy as np
import matplotlib.pylab as plt


def step_fucntion(x):
    return np.array(x > 0, dtype=np.int_)


x = np.arange(-5.0, 5.0, 0.1)
y = step_fucntion(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

这是阶跃函数的图像和代码展示

 

 

import numpy as np
import matplotlib.pylab as plt


def sigmoid(x):
    return 1 / (1 + np.exp(-x))


x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

 

 这是sigmoid函数的图像。

 

sigmoid函数的平滑性对神经网络的学习具有重要意义。

sigmoid函数和阶跃函数都是非线性函数,如果使用线性函数的话,加深神经网络的层数就没有意义了。

其次是ReLU函数, h(x) = x (x>0) h(x) = 0 (x<=0)

然后是多维数组的运算。以下是多维矩阵运算的代码

import numpy as np
import matplotlib.pylab as plt


A = np.array([1,2,3,4])
print(A)
print(np.ndim(A))#返回数组的维数
print(A.shape)#返回的是一个元组

# 以下是矩阵的乘法运算
B = np.array([[1,2],[3,4]])
C = np.array([[5,6],[7,8]])
D = np.dot(B,C)
print(D)

特别要注意,从隐藏层到输出层,一般把激活函数h(x)换成σ(x)(读作sigma)

其次是输出层的设计。一般来说回归问题使用恒等函数,分类问题使用softmax()函数。

softmax函数 yk = exp(ak) /∑ exp(ai ) i是从0 到n 所有数, 然后分母进行求和。

以下是展示数据集第一张图片的代码

# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import numpy as np
from dataset.mnist import load_mnist
from PIL import Image


def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

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

img = x_train[0]
label = t_train[0]
print(label)  # 5

print(img.shape)  # (784,)
img = img.reshape(28, 28)  # 把图像的形状变为原来的尺寸
print(img.shape)  # (28, 28)

img_show(img)

这里的load_mnist对我们初学者来说就是一个黑盒,我们只知道怎么使用,但是不理解内部原理。

x_train是一个二维数据 第一维代表图片的数量,第二位代表每一个图片像素乘积数。 t_train是一个一位数组,代表所有分类的结果,分别存入一维数组中。

前两个是训练集,后两个是测试的数据。可以计算准确率。

其次是具体的实现代码

# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import numpy as np
import pickle
from dataset.mnist import load_mnist
from common.functions import sigmoid, softmax

//通过load_mnist函数获取到训练集和数据集  normalize代表是否将图像正规化 flatten代表是否展开输入图像(变成一位数组) one_hot_label为True时标签只存在0和1
t_train和t_test就是标签,如果one_hot_label为False时,这里t_test就代表从0-9的一维数组
def get_data(): (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False) return x_test, t_test //从pkl文件中读取权重的字典和偏置的字典,返回值是一个字典 def init_network(): with open("sample_weight.pkl", 'rb') as f: network = pickle.load(f) return network //返回计算之后,输出的值 def predict(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 = softmax(a3) return y //下面的代码用于计算正确率 x, t = get_data() network = init_network() accuracy_cnt = 0 for i in range(len(x)): y = predict(network, x[i]) p= np.argmax(y) # 获取概率最高的元素的索引 ,y是一个一维数组,argmax函数用来找出一维数组的最大值所对应的下标。 if p == t[i]: accuracy_cnt += 1 print("Accuracy:" + str(float(accuracy_cnt) / len(x)))

 

标签:函数,img,sigmoid,软工,4.9,神经网络,np,import,network
From: https://www.cnblogs.com/laohei114514/p/17301352.html

相关文章

  • 2023.4.9每日总结
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"&g......
  • 深入浅出神经网络与深度学习 (迈克尔·尼尔森(Michael Nielsen)) Chapter1
    1.1感知机perceptron20世纪五六十年代,科学家FrankRosenblatt发明了感知机,其受到了WarrenMcCulloch和WalterPitts早期研究的影响。 what'sweightedsuminperceptron?Inthecontextoftheperceptronalgorithm,theweightedsumreferstothelinearcombina......
  • 日常随笔2023.4.9
    #日常随笔2023.4.9​最近有些在脑海中有些许胡思乱想,我总是爱这样毫无边际的去幻想。这种行为是无法停止,所以倒不如尝试着回头去追忆自己想过的东西,一方面总结有用的经验,能加深自己的印象,另一方面,想和写是两码事情,想象可以没有逻辑,自由自在,但写作确实要讲究逻辑,不能任由散乱去......
  • 神经网络简介
    神经网络是一种类似于人脑神经元网络的计算模型,可以处理复杂的非线性问题,如图像识别、语音识别、自然语言处理等。本文将简要介绍神经网络的基本概念、类型和应用。一、基本概念神经元:神经网络的基本单元,类比于人脑中的神经元。它接收一组输入,进行一些计算,并产生一个输出。输......
  • 机器学习(四):4层BP神经网络(只用numpy不调包)用于训练鸢尾花数据集|准确率96%
    题目:设计四层BP网络,以g(x)=sigmoid(x)为激活函数,神经网络结构为:[4,10,6,3],其中,输入层为4个节点,第一个隐含层神经元个数为10个节点;第二个隐含层神经元个数为6个节点,输出层为3个节点利用训练数据iris-train.txt对BP神经网络分别进行训练,对训练后的模型统计识别正确率,并计算......
  • 图神经网络 基础、前沿与应用 第零章 术语 & 符号 阅读笔记
    图的基本概念中心度:用来衡量图中节点的重要性。中心度的基本假设是:如果其他重要的节点也连接到该节点,则认为该节点是重要的。常见的中心度度量包括度数中心度、特征向量中心度、间隔性中心度和接近性中心度。邻域:一个节点的邻域一般是指与该节点相近的其他节点的集合(距离为1)。......
  • 图神经网络 基础、前沿与应用 第一章 表征学习 阅读笔记
    导读表征学习的目标是从数据中提取足够但最少的信息。传统上,该目标可以通过先验知识以及基于数据和任务的领域专业知识来实现,这也被称为特征工程。特征工程是利用人类的现有知识的一种方式,旨在从数据中提取并获得用于机器学习任务的判别信息(比如从音频中通过傅立叶变换提取出mel......
  • 图神经网络 基础、前沿与应用 第三章 图神经网络 阅读笔记
    导读传统的深度学习技术已经在图像等欧式数据或文本和信号等序列数据上取得巨大的成功。但也有很多领域数据需要用复杂的图结构来表达,这些图结构的数据可以编码复杂的点对关系,以学习更丰富的信息表征;另一面,原始数据(图像或连续文本)的结构和语义信息中纳入特定领域知识可以捕捉数......
  • 图神经网络 基础、前沿与应用 第二章 图表征学习 阅读笔记
    摘要图表征学习的目的是将图中的节点嵌入低维的表征并有效地保留图的结构信息。导读许多复杂的系统具有图的形式,如社交网络、生物网络和信息网络。为了有效地处理图数据,第一个关键的挑战是找到有效的图数据表征方法,也就是如何简洁地表征图,以便在时间和空间上有效地进行高级的......
  • 【研究生学习】Pytorch基本知识——神经网络实战分类与回归任务
    本博客主要记录一下神经网络实战分类与回归任务如何用Pytorch完成气温数据集及任务介绍首先需要导入数据集:importpandasaspdfeatures=pd.read_csv('temps.csv')print(features.head())#取数据的前n行数据,默认是前5行可以看到运行结果,看一下数据的样子:数据中的......