首页 > 其他分享 >深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(4)

深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(4)

时间:2024-02-12 19:00:13浏览次数:33  
标签:nin 框架 示例 self batch grandfather TT data batchsize

实战(DenseLayer):

下面用本篇的内容,写一个全连接层,实现前向传播、反向传播和参数更新。并用它实现一个3输入1输出的单层感知机,拟合函数y = x0 + x1 + x2。



代码:

import theano
import theano.tensor as TT
import numpy as np
import pylab
 

class Dataset():
    def __init__(self, nsample, batchsize, nin):
       self.nsample = nsample
       self.batchsize = batchsize
       self.batch_num = nsample / batchsize
       self.data_x = np.array(np.random.rand(self.nsample*nin))\
                       .reshape(nsample,nin).astype('float32')
       self.data_y = self.data_x.sum(axis=1, keepdims=True)
 
    def reset(self):
       self.batch_cnt = 0
       self.indeces = np.array(range(self.nsample))
       np.random.shuffle(self.indeces)
       self.data_x = self.data_x[self.indeces]
       self.data_y = self.data_y[self.indeces]
 
    def read(self):
       self.batch_cnt += 1
       if self.batch_cnt > self.batch_num:
           return None
       batchsize = self.batchsize
       i = self.batch_cnt - 1
       xsample = self.data_x[i*batchsize:(i+1)*batchsize]
       ysample = self.data_y[i*batchsize:(i+1)*batchsize]
       return xsample, ysample
 

Identity = lambda x:x
ReLU = lambda x: TT.maximum(x, 0.0)
Sigmoid = lambda x: TT.nnet.sigmoid(x)
Tanh = lambda x: TT.tanh(x)
 

class DenseLayer():
    def __init__(self, nin, nout, activation):
       self.activation = eval(activation)
       w_init = np.random.rand(nin*nout)\
                    .reshape((nin, nout)).astype('float32')
       b_init = np.random.rand(nout).reshape(nout).astype('float32')
       self.w = theano.shared(value=w_init, borrow=True)
       self.b = theano.shared(value=b_init, borrow=True)
 
    def feedforward(self, x):
       return self.activation(TT.dot(x, self.w) + self.b)
 

if __name__ == '__main__':
 
    nin = 3
    nout = 1
 
    x = TT.fmatrix('x')
    y = TT.fmatrix('y')

    model = DenseLayer(nin, nout, activation='Identity')
    out = model.feedforward(x)

    loss = TT.mean(TT.sqr(y - out)) # 均方误差作为损失函数
    f_loss = theano.function([x, y], loss)
 
    (grad_w, grad_b) = TT.grad(loss, [model.w, model.b]) # 损失函数对参数的导数
    lr = TT.fscalar('lr')
    f_update = theano.function([x,y,lr], [grad_w, grad_b],
                updates=[(model.w, model.w - lr * grad_w),
                         (model.b, model.b - lr * grad_b)],
                allow_input_downcast=True)
 

    epoch = 1
    learn_rate = 0.01
    batch_err = []
    data = Dataset(nsample=1024, batchsize=512, nin=3)
    for epo in range(epoch):
       data.reset()
       while True:
           batchdata = data.read()
           if batchdata is None:
              break
           xsample, ysample = batchdata
           # print(ysample.shape)
           batch_error = f_loss(xsample, ysample) # 计算batch损失
           print(batch_error)
           f_update(xsample, ysample, learn_rate) # 更新参数
           batch_err.append(batch_error)
 
    pylab.plot(batch_err, marker='o')
    pylab.show()

运行结果:

image



增加epoch数量,如2000,运行结果:

image



参考:

https://zhuanlan.zhihu.com/p/24218567



标签:nin,框架,示例,self,batch,grandfather,TT,data,batchsize
From: https://www.cnblogs.com/devilmaycry812839668/p/18014040

相关文章

  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(3)
    实战:写一个卷积层ConvolutionLayer二维卷积的前向操作:代码:importtheano.tensorasTTimporttheanoimportnumpyasnp#fromtheano.tensor.shared_randomstreamsimportRandomStreamsIdentity=lambdax:xReLU=lambdax:TT.maximum(x,0.0)Sigmoid=lambda......
  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(2)
    代码1:(ifelse判断结构)importtheanofromtheanoimporttensorfromtheano.ifelseimportifelsex=tensor.fscalar('x')y=tensor.fscalar('y')z=ifelse(x>0,2*y,3*y)#x>0的返回值是int8类型f=theano.function([x,y],z,allow_input_down......
  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(1)
    示例代码1:importtheanofromtheanoimporttensorx=tensor.vector("x")y=tensor.vector("y")w=tensor.vector("w")z=tensor.vector("z")z=x+y+wf=theano.function([x,theano.In(y,value=[1,1,1]),theano.In(......
  • PHP项目&TP框架&SQL&XSS&架构&路由&调试&写法
    开发基础-TP框架-入口&调试&路由&写法等参考手册-TP5开发手册-为了掌握了解框架首页文件看APP_PATH定义-为了后期分析核心代码全局搜索:THINK_VERSION,为了后期分析此版本是否存在漏洞。参考手册-本地代码案例对比,为了后期分析定位代码块或测试漏洞。配置文件开关(app_debug,a......
  • extism 基于rust 开发的强大webassembly 框架
    extism基于rust开发的强大webassembly框架包含的特性使用简单 可以方便的开发基于webassembly的插件系统安全方便运行 包含了灵活的架构可以可以方便与多种语言进行通信(基本覆盖了主流的编程语言)说明目前基于webassembly的语言集成热度是越来越高了,webassembly很值......
  • 第 7章 Python 爬虫框架 Scrapy(上)
    第7章Python爬虫框架Scrapy(上)编写爬虫可以看成行军打仗,基本的角色有两个:士兵和将军,士兵冲锋陷阵,而将军更多地是调兵遣将。框架就像一个将军,里面包含了爬虫的全部流程、异常处理和任务调度等。除了可以让我们少写一些烦琐的代码,学习框架还可以学到编程思想和提升编程能力。Pyt......
  • Java之泛型系列--继承父类与实现多个接口(有示例)
    原文网址:​​Java之泛型系列--继承父类与实现多个接口(有示例)_IT利刃出鞘的博客-CSDN博客​​简介本文介绍java如何用泛型表示继承父类并实现多个接口。用泛型表示某个类是某个类的子类或者实现了接口的方法为:<TextendsA&B&C> 用法1:全都是接口。对于本例来说:A、B......
  • nim静态编译capstone示例代码
    capstone.c代码:/*CapstoneDisassemblerEngine*//*ByNguyenAnhQuynh<[email protected]>,2013*/#include<stdio.h>#include<stdlib.h>#include<capstone/capstone.h>#include<capstone/platform.h>staticcshhandle;s......
  • 深度学习框架Theano停止维护
    Theano停止开发的声明地址:https://groups.google.com/g/theano-users/c/7Poq8BZutbY/m/rNCIfvAEAwAJ原文内容:Dearusersanddevelopers,Afteralmosttenyearsofdevelopment,wehavetheregrettoannouncethatwewillputanendtoourTheanodevelopmentafter......
  • 策略模式的代码实践示例
    一、定义策略模式,针对每一个不同的类型,调用具有共同接口的不同实现类,从而使得它们可以相互替换。策略模式,针对实现同一接口的不同的类,采用不同的策略。比如,面对高级会员、初级会员会采用不同的折扣。策略模式,可以避免大量的if和else。二、角色策略模式涉及到三个角色:●......