torch教程[1]用numpy实现三层全连接神经网络

torch的第一个例子程序,是用numpy函数实现神经网络。cs231n的课程中有大量这样的作业。

import numpy as np
N,D_in,H,D_out=64,1000,100,10
x=np.random.randn(D_in,H)
x=np.random.randn(N,D_in)
y=np.random.randn(N,D_out)
w1=np.random.randn(D_in,H)
w2=np.random.randn(H,D_out)
learning_rate=1e-6
for t in range(500):
    h=x.dot(w1)
    h_relu=np.maximum(h,0)
    y_pred=h_relu.dot(w2)
    #compute and print loss
    loss=np.square(y_pred-y).sum()
    print(t,loss)

    grad_y_pred=2.0*(y_pred-y)
    grad_w2=h_relu.T.dot(grad_y_pred)
    grad_h_relu=grad_y_pred.dot(w2.T)
    grad_h=grad_h_relu.copy()
    grad_h[h<0]=0
    grad_w1=x.T.dot(grad_h)

    w1-=learning_rate*grad_w1
    w2-=learning_rate*grad_w2

这是一个三层的神经网络,包括一个输入层,一个中间隐藏层和一个输出层,神经元数分别为Din, H和Dout

前向传播时,H=XW1, H=max(H,0), Y=HW2

反向传播时,按如下公式计算梯度:

若Y=XB, 则DX=YBT  DB=XT DY

若Hrelu=max(H,0) DH=Hrelu if H>0 else DH=0

时间: 2024-10-06 10:58:04

torch教程[1]用numpy实现三层全连接神经网络的相关文章

全连接神经网络 MLP

全连接神经网络 MLP 最近开始进行模型压缩相关课题,复习一下有关的基础知识. 1. MLP简介 上图是一个简单的MLP,这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层. 为了方便下面的公式描述,引入一张带公式的图. i是input层,h是hide层,o是output层. 2. MLP 正向传播 正向传播其实就是预测过程,就是由输入到输出的过程. 为之前的图片赋上初值, 上述变量中,存在着如下过程:原始输入-> 带权计算-> ne

【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构建CNN[待学习] 全连接+各种优化[待学习] BN层[待学习] 先解释以下MNIST数据集,训练数据集有55,000 条,即X为55,000 * 784的矩阵,那么Y为55,000 * 10的矩阵,每个图片是28像素*28像素,带有标签,Y为该图片的真实数字,即标签,每个图片10个数字,1所在位置

tensorflow 全连接神经网络识别mnist数据

之前没有学过tensorflow,所以使用tensorflow来对mnist数据进行识别,采用最简单的全连接神经网络,第一层是784,(输入层),隐含层是256,输出层是10 ,相关注释卸载程序中. 1 #!/usr/bin/env python 3.6 2 #_*_coding:utf-8 _*_ 3 #@Time    :2020/2/12 15:34 4 #@Author  :hujinzhou  5 #@FileName: mnist.py 6 7 #@Software: PyCharm

前馈全连接神经网络和函数逼近、时间序列预测、手写数字识别

https://www.cnblogs.com/conmajia/p/annt-feed-forward-fully-connected-neural-networks.html Andrew Kirillov 著Conmajia 译2019 年 1 月 12 日 原文发表于 CodeProject(2018 年 9 月 28 日). 中文版有小幅修改,已获作者本人授权. 本文介绍了如何使用 ANNT 神经网络库生成前馈全连接神经网络并应用到问题求解. 全文约 12,000 字,建议阅读时间 3

pytorch实现MNIST手写体识别(全连接神经网络)

环境: pytorch1.1 cuda9.0 ubuntu16.04 该网络有3层,第一层input layer,有784个神经元(MNIST数据集是28*28的单通道图片,故有784个神经元).第二层为hidden_layer,设置为500个神经元.最后一层是输出层,有10个神经元(10分类任务).在第二层之后还有个ReLU函数,进行非线性变换. #!/usr/bin/env python # encoding: utf-8 ''' @author: liualex @contact: [em

神经网络之全连接层(线性层)

对于神经网络的全连接层,前面已经使用矩阵的运算方式实现过,本篇将引入tensorflow中层的概念, 正式使用deep learning相关的API搭建一个全连接神经网络.下面是全连接神经网络的结构图 其中,x1,x2,x3为输入,a1,a2,a3为输出,运算关系如下: x1,x2,x3所在的层叫神经网络的输入层,a1,a2,a3所在的层叫神经网络的输出层,如果两层中间还有若干层,那么中间的这些层叫做隐藏层. 那么,如何使用tensorflow去创建这样的层呢?其实非常简单,只需要调用tf.ke

AI基础之全连接

如上篇文章所讲,将我们需用的环境搭建完成以后,我们就可以开始AI之路了,下面就让我们来看看第一个网络框架结构——全连接吧. import torch.nn as nn#导入所需库 class Net(nn.Module): #初始化网络结构(设计神经网络) def __init__(self): super().__init__() #设计一个多层结构的神经网络 self.layers = nn.Sequential( nn.Linear(28*28,512), #设计一层神经网络,有512个神

resnet18全连接层改成卷积层

想要尝试一下将resnet18最后一层的全连接层改成卷积层看会不会对网络效果和网络大小有什么影响 1.首先先对train.py中的更改是: train.py代码可见:pytorch实现性别检测 # model_conv.fc = nn.Linear(fc_features, 2)这是之前的写法 model_conv.fc = nn.Conv2d(fc_features, 2, 1) print(model_conv.fc) 但是运行的时候出错: 1) RuntimeError: Expected

Pytorch修改ResNet模型全连接层进行直接训练

之前在用预训练的ResNet的模型进行迁移训练时,是固定除最后一层的前面层权重,然后把全连接层输出改为自己需要的数目,进行最后一层的训练,那么现在假如想要只是把 最后一层的输出改一下,不需要加载前面层的权重,方法如下: model = torchvision.models.resnet18(pretrained=False) num_fc_ftr = model.fc.in_features model.fc = torch.nn.Linear(num_fc_ftr, 224) model =