博主正在学深兰交大人工智能AI,特此做此笔记,想学的朋友可以一起学习交流,不止笔记,视频

项目:Purdue University BME595课程作业

这个项目是一位朋友向我推荐的入门学习用的,是在Github上下载的其他学生的作业,由于找不到作业要求,只有一个程序,所以每一个作业的目的,以及如何去理解这个程序都是我自己逆推出来的,加之这是一份学习笔记,我也是初学此道,是以如果出现错误以及缺漏之处,还望诸位不吝赐教。

这位老哥的程序是我找了几个做对比后,相对而言readme写的较为详尽,且程序注释较多的一个。

另外,这是我第一次写博客分享学习笔记,也不太清楚是否会构成对这个项目亦或者这个老哥的程序的侵权什么的,如果有我会立刻修改。

Homework02——Artificial Neural Network - FeedForward pass

本次作业的目的在于通过建立一个前馈神经网络模型实现对与门、或门、非门、异或门的结果输出。

代码与输出结果

# test.py
from logic_gate import AND
from logic_gate import XOR
​
# Initialize 2 types of Gates
And = AND()
Xor = XOR()
​
# Test cases for AND
print("\nDemonstrating AND Gate functionality using FeedForward Neural Network")
print("And(False, False) = %r" % And(False, False))
print("And(False, True) = %r" % And(False, True))
print("And(True, False) = %r" % And(True, False))
print("And(True, True) = %r" % And(True, True))
​
# Test cases for XOR
print("\nDemonstrating XOR Gate functionality using FeedForward Neural Network")
print("XOR(False, False) = %r" % Xor(False, False))
print("XOR(False, True) = %r" % Xor(False, True))
print("XOR(True, False) = %r" % Xor(True, False))
print("XOR(True, True) = %r" % Xor(True, True))
​
​
# logic_gate.py
from neural_network import NeuralNetwork
import torch
import numpy as np
​
​
class AND:def __init__(self):# 与门的输入层为两个感知器(perception) 且不需要隐含层 故初始化一个两层的ANNself.and_gate = NeuralNetwork([2, 1])# 人为指定权重self.weights = self.and_gate.getLayer(0)self.weights += torch.DoubleTensor([[-30], [20], [20]])
​def __call__(self, x: bool, y: bool):# x和y为接收到的输入self.x = xself.y = y# 调用前馈神经网络来计算output = self.and_gate.feedforward(torch.DoubleTensor([[self.x], [self.y]]))return bool(np.around(output.numpy()))
​
​
class XOR:def __init__(self):# 异或门的输入层为两个感知器(perception) 需要一层含两个感知器的隐含层 故初始化一个三层的ANNself.xor_gate = NeuralNetwork([2, 2, 1])# 为输入层和隐含层人为指定权重self.weights_1 = self.xor_gate.getLayer(0)self.weights_2 = self.xor_gate.getLayer(1)self.weights_1 += torch.DoubleTensor([[-50, -50], [60, -60], [-60, 60]])self.weights_2 += torch.DoubleTensor([[-50], [60], [60]])
​def __call__(self, x: bool, y: bool):# x和y为接收到的输入self.x = xself.y = y# 调用前馈神经网络来计算output = self.xor_gate.feedforward(torch.DoubleTensor([[self.x], [self.y]]))return bool(np.around(output.numpy()))
​
​
# neural_network.py
import numpy as np
import torch
import math
​
​
class NeuralNetwork:def __init__(self, layers_list: list):self.layers_list = layers_list# 建立一个字典 用以存放权重weights# eg: and_gate.weights = {'(layer0-layer1)': tensor([[-30.],#                                                    [ 20.],#                                                    [ 20.]], dtype=torch.float64)}
​self.weights = {<!-- -->}self.key = ["" for x in range(len(self.layers_list) - 1)]# 设置字典的键值for i in range(len(self.layers_list) - 1):self.key[i] = "(layer" + str(i) + "-layer" + str(i + 1) + ")"# 初始化一个大小符合需求的张量Tensor 将其值全部初始化为double类型的0# 所需张量的第零维(第一个维度)为本层的感知器的个数再加一个bias 故为self.layers_list[i] + 1for i in range(len(self.layers_list) - 1):self.weights[self.key[i]] = torch.zeros((self.layers_list[i] + 1, self.layers_list[i + 1]),dtype=torch.double)
​def getLayer(self, layer: int):# 将所需层的权重矩阵传递出去self.layer = layerreturn self.weights[self.key[layer]]
​def feedforward(self, input: torch.DoubleTensor):# 激活函数 Sigmoid# 若输入的为一个二维张量 则计算过程是分别单独计算后再作为一个二维张量来输出def sigmoid(inp: torch.DoubleTensor):product = inp.numpy()sig = 1 / (1 + np.exp(-product))return torch.from_numpy(sig)
​self.input = input
​# 新建一个初始值为1的一个一维张量来做bias 并将其修改为double型bias = torch.ones((1, 1))bias = bias.type(torch.DoubleTensor)# sig_prod存储了输入层的感知器的值sig_prod = self.input
​# 对于and_gate这种两层的ANN来说循环并不需要# 对于xor_gate来说 其需要先通过输入层来计算出隐含层的值 再用此结果来计算最后的输出层结果for i in range(len(self.layers_list) - 1):# 将bias和感知器的值拼接成一个张量cat_input = torch.cat((bias, sig_prod), 0)# 将权重weights张量取转置 方便下一步的矩阵乘法weights_trans = torch.t(self.weights[self.key[i]])# 矩阵乘法prod = torch.mm(weights_trans, cat_input)# 将矩阵乘法计算出的张量送入激活函数中进行计算 其结果送回到sig_prod中 以便输出或作为下一次循环的输入sig_prod = sigmoid(prod)
​return sig_prod
​

结果输出: <p>

知识框架

一、Artificial Neural Network & FeedForward

对于人工神经网络ANN的提出背景此处就不再多赘述了,这里简单放一个逻辑结构。 <p>

即,一个输入层,多个隐藏层,以及一个输出层共同组成。

我们定义上图中每个圆圈代表一个神经元模型,称其为感知器(perceptron)。

那么我们的目的就在于,对于输入的数据通过一定的处理之后,得到最后我们需要的结果。

同时,由于输入的数据对于结果的影响程度或许不同,因此我们需要对其加上一定的权重来控制其对最终结果的影响。

那么我们将权重放在不同层间的感知器的连线上,那么这样,我们就构建出了一个我们需要的神经网络模型。

而一旦我们指定了确定的权重,以及给定每一层所需的偏置值bias,那么我们就可以通过输入数据从而得到我们所需的输出数据,这一过程便被称之为前馈神经网络。

这个时候就会又出现一个新的问题,按照我们上述的表示方法来说,每一层到下一层的输出都是一个线性输出,如果按照这样的思路的话,完全可以取消掉中间所有的隐含层,只保留输入层和输出层,直接通过对输入层的线性表示来将输出层表示出来。 <p>

那么如果是这样的话,显然与我们一开始的建模产生了冲突,另外,若仅仅只能表示线性的话,对于占据了更多数情况的非线性情况来说,显然我们的模型是远不能满足需要的。

因此,事实上在每一层向下一层的输出时,都要通过一个名为【激活函数】的方法,将其变为非线性的情况,从而使得最后的模型能够满足非线性情况下的需要。 <p>

深兰交大人工智能培训5期笔记总结相关推荐

  1. 小迪安全培训2023期笔记汇总-持续更新

    课件内容以及部分复现 基础入门 章节内容 应用架构:Web/APP/云应用/小程序/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令:文件上传下载/端口服务/She ...

  2. 人工智能培训机构,如何才能选到一个靠谱的?看这篇就够了-交大人工智能中心

    人工智能培训不同于其他IT的培训,对培训机构的要求非常之高. 第一:拥有真正的机器人 人工智能培训和其他编程课程还不太一样,不像java,c++等,只需要一台电脑就可以学习了,所以大部分IT培训机构都 ...

  3. 人工智能培训机构哪个好?求求你们别再去培训机构学假的人工智能了!

    关于人工智能的话题,自2017年7月国务院发布<新一代人工智能发展规划>以来,国内正式掀起了人工智能领域的热潮.随着2020新公布的七大"新基建"更让人工智能的学习如火 ...

  4. 求求你们别再去培训机构学假的人工智能了,培训机构的人工智能培训的“坑”

    自从人工智能走入大家的视线,到今年新公布的七大"新基建",人工智能榜上有名.人工智能行业发展可以说是热火朝天,当然,导致了一些不合规的培训机构打着"打着人工智能的旗号&q ...

  5. 人工智能培训机构哪个好?人工智能培训中的“坑”让我来告诉你

    在人工智能进入人们视野的同时,疫情爆发也让人们对人工智能产业的关注空前高涨,意识到"机器代替人"是必然! 7个新的基础设施项目被公布,国家有关政策对人工智能产业的推动和大力支持,使 ...

  6. 校办研修之计算机培训简报,“2018校本研修培训”第二期学习简报

    原标题:"2018校本研修培训"第二期学习简报 校训校风:博教风学风: 学习提升,共约成长 洛阳市第二十六中学2018年校本研修培训 学习简报(第二期) 素材收集:数学组.物理组. ...

  7. 人工智能培训市场前景如何?

    人工智能的发展引起了社会各界的瞩目,全球各国也深知要想取得发展的制高点就必须大力发展人工智能.我国也相继出台了许多政策支持人工智能的发展,人工智能正迎来史上发展的红利期. 人工智能行业持续升温 随着人 ...

  8. 大龄女青年,开发转人工智能,一举进入外企。 From交大人工智能中心

    32岁,算是大龄女青年,由开发行业,转入人工智能,算法工程师,年薪37万.外资企业,工业类. 面试官给我的评价: 说我的情商和智商都很高,窃喜.连猎头都对我说,对方的意愿不错 其实同班同学中,也有比我 ...

  9. 人工智能实践:TensorFlow笔记学习(八)—— 卷积神经网络实践

    大纲 7.1  复现已有的卷积神经网络 7.2  用vgg16实现图片识别 目标 掌握复现已有网络,用vgg16实现图片识别 7.1  复现已有的卷积神经网络 VGGNet是Karen simonya ...

最新文章

  1. 29个简单直观的移动设备网页设计
  2. android检测蓝牙设备连接不上,Android检查设备连接状态
  3. 操作系统、Linux、CPU的几个疑惑点
  4. 从创业到成功,SaaS巨头Salesforce靠的是这七大秘诀
  5. 字符编码笔记:ASCII,Unicode和UTF-8(转) + BASE64
  6. 《SpringCloud超级入门》Eureka自我保护模式和InstanceID的配置《十四》
  7. 手机变身IoT设备之地理位置上报
  8. 局域网带宽控制解决方案 P2P终结者使用详解
  9. python 列表比较不同物质的吸热能力_文章
  10. Java项目:ssm房屋租赁管理系统
  11. 局域网考勤python_Python3.7实现中控考勤机自动连接
  12. 2020伊始,电动车又给自己刷了一遍谎言buff
  13. 解决Ubuntu插上耳机没声音
  14. [BZOJ3460]Jc的宿舍
  15. Python——类和实例
  16. bootstrap文字,图片
  17. 计算机视觉知识学习总结
  18. java学籍管理信息系统模板_java学籍管理系统051
  19. 山西经济林栽培技术之形考作业三
  20. Java中%是什么意思?

热门文章

  1. html nav 置顶居中,如何让我的nav栏始终在页面中居中使用CSS3?
  2. c语言错误c4430,声明*C某类::Getdocument();(已声明,不兼容)
  3. Java基础(一) —— JDK安装、第一个Java程序、Java数据类型、修饰符、运算符、循环、条件
  4. 芝村乡个人小额投资理财的正确观念
  5. 云主机是怎么配置软件的
  6. python画正方形内切圆_任意多边形最大内接圆算法的Python实现,内切圆
  7. 基本正则表达式与扩展正则表达式
  8. GAN原理总结以及对比
  9. Java 在线预览pdf
  10. FZU 1962 新击鼓传花游戏