tensorflow2.0 学习(三)

用tensorflow2.0 版回顾了一下mnist的学习

代码如下,感觉这个版本下的mnist学习更简洁,更方便

关于tensorflow的基础知识,这里就不更新了,用到什么就到网上取搜索相关的知识

# encoding: utf-8

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

#加载下载好的mnist数据库 60000张训练 10000张测试 每一张维度(28,28)
path = r‘G:\2019\python\mnist.npz‘
f = np.load(path)
x_train, y_train = f[‘x_train‘], f[‘y_train‘]
f.close()

#预处理输入数据
x = 2*tf.convert_to_tensor(x_train, dtype = tf.float32)/255. - 1
x = tf.reshape(x, [-1, 28*28])
y = tf.convert_to_tensor(y_train, dtype=tf.int32)
y = tf.one_hot(y, depth=10)

#第一层输入256, 第二次输出128, 第三层输出10
#第一,二,三层参数w,b
w1 = tf.Variable(tf.random.truncated_normal([784, 256], stddev=0.1))    #正态分布的一种
b1 = tf.Variable(tf.zeros([256]))
w2 = tf.Variable(tf.random.truncated_normal([256, 128], stddev=0.1))
b2 = tf.Variable(tf.zeros([128]))
w3 = tf.Variable(tf.random.truncated_normal([128, 10], stddev=0.1))
b3 = tf.Variable(tf.zeros([10]))

#将60000组数据切分为600组,每组100个数据
train_db = tf.data.Dataset.from_tensor_slices((x, y)).batch(100)
lr = 0.001      #学习率
losses = []     #储存每epoch的loss值,便于观察学习情况

for epoch in range(20):
    #一次性处理100组(x, y)数据
    for step, (x, y) in enumerate(train_db):    #遍历切分好的数据step:0->599
        with tf.GradientTape() as tape:
            #向前传播第一,二,三层
            h1 = [email protected] + tf.broadcast_to(b1, [x.shape[0], 256])  #可以直接写成 +b1
            h1 = tf.nn.relu(h1)
            h2 = [email protected] + b2
            h2 = tf.nn.relu(h2)
            out = [email protected] + b3
            #计算mse
            loss = tf.square(y - out)
            loss = tf.reduce_mean(loss)
        #计算参数的梯度,tape.gradient为自动求导函数,loss为目标数据,目的使它越来越接近真实值
        grads = tape.gradient(loss, [w1, b1, w2, b2, w3, b3])
        #更新w,b
        w1.assign_sub(lr*grads[0])  #原地减去给定的值,实现参数的自我更新
        b1.assign_sub(lr*grads[1])
        w2.assign_sub(lr*grads[2])
        b2.assign_sub(lr*grads[3])
        w3.assign_sub(lr*grads[4])
        b3.assign_sub(lr*grads[5])
        #观察学习情况
        if step%500 == 0:
            print(epoch, step, ‘loss:‘, float(loss))
    #将每epoch的loss情况储存起来,最后观察
    losses.append(float(loss))

plt.plot(losses, marker=‘s‘, label=‘training‘)
plt.xlabel(‘Epoch‘)
plt.ylabel(‘MSE‘)
plt.legend()plt.savefig(‘exam_mnist_forward.png‘)
plt.show()

观察结果:

可由注释理解代码的含义!下一次更新mnist数据集训练的进阶!

原文地址:https://www.cnblogs.com/heze/p/12076792.html

时间: 2024-10-07 22:53:17

tensorflow2.0 学习(三)的相关文章

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 1 <%@ page language="jav

tensorflow2.0新特性

Tensorflow2.0相比于以往版本,有着极大的区别:最明显的区别可以用三字词来概括:更简单,更易用,更强大. 接下来让我们一起见证下不一样的地方吧! 一.使用tf.data加载数据 使用tf.data创建的输入管道读取训练数据:支持从内存(Numpy)方便地输入数据: 二.使用tf.keras构建,训练和验证模型,或使用Premade来验证模型 可以直接标准的打包模型(逻辑回归,随机森林),也可以直接使用(tf.estimator API) 如果不想从头训练模型,可以使用迁移学习来训练一个

windows10系统下安装tensorflow2.0

最近开始做深度学习实验,在老师的推荐下准备采用tensorflow框架构建神经网络结构,在此记录下今天安装tensorflow2.0的过程和踩过的坑,方便以后复习,以及给后来者一个参考. 1.安装过程 1)需要安装的东西: i.anaconda(或者miniconda,可以理解为精简版的anaconda,只保留了一些必备的组件,所以安装上会快很多,同时也满足我们管理python环境的需求). ii.CUDA和CuDNN(CPU版不用,GPU版必须) iii.tensorflow CUDA和CuD

iOS开发——学习总结swift篇&amp;swift 2.0学习与总结一

swift 2.0学习与总结一 一:属性策略(OC中的叫法) strong: 在Swift中是默认的 weak: 通过weak关键词申明 weak var delegate: UITextFieldDelegate? readonly,readwrie 直接通过声明变量var,声明常量let的方式来指明 copy 通过@NSCopying指令声明. 值 得注意的是String,Array和Dictionary在Swift是以值类型(value type)而不是引用类型(reference typ

Jetty学习三:配置概览-需要配置什么

上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你需要配置些什么. 配置Server Server实例是Jetty服务端的中心协调对象,它为所有其他Jetty服务端组件提供服务和生命周期管理.在标准Jetty发布中,核心的服务端配置是在etc/jetty.xml文件中,你也能在其中包含其他服务端配置,可以包括: 1)ThreadPool Server实例提供了一个线程池,你可以在etc/jetty.xml中配置最大线程数和最小线程数. 2)Handlers Jetty服务端只能有一个H

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

ZigBee学习三 UART通信

ZigBee学习三 UART通信 本实验只对coordinator.c文件进行改动就可以实现串口的收发. 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique message ID (counter) afAddrType_t GenericApp_DstAddr; unsigned char uartbuf[128];/**************************************************

Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea

文章大纲 在xml中声明bean和注入bean 在xml中声明bean和自动注入bean 自动扫描bean和自动注入bean 对自动扫描bean增加约束条件 首次接触spring请参考 Spring 3.0 学习-环境搭建和三种形式访问 1.典型的Spring XML 配置文件表头 <?xml version="1.0" encoding="UTF-8"?><!-- 一般化的Spring XML 配置 --> <beans xmlns=

Spark学习三:Spark Schedule以及idea的安装和导入源码

Spark学习三:Spark Schedule以及idea的安装和导入源码 标签(空格分隔): Spark Spark学习三Spark Schedule以及idea的安装和导入源码 一RDD操作过程中的数据位置 二Spark Schedule 三Idea导入spark源码 一,RDD操作过程中的数据位置 [hadoop001@xingyunfei001 spark-1.3.0-bin-2.5.0]$ bin/spark-shell --master local[2] val rdd = sc.t