前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >前向传播(张量)- 实战

前向传播(张量)- 实战

作者头像
py3study
发布于 2020-01-16 07:04:20
发布于 2020-01-16 07:04:20
44300
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

目录

手写数字识别流程

  • MNIST手写数字集7000*10张图片
  • 60k张图片训练,10k张图片测试
  • 每张图片是28*28,如果是彩色图片是28*28*3
  • 0-255表示图片的灰度值,0表示纯白,255表示纯黑
  • 打平28*28的矩阵,得到28*28=784的向量
  • 对于b张图片得到[b,784];然后对于b张图片可以给定编码
  • 把上述的普通编码给定成独热编码,但是独热编码都是概率值,并且概率值相加为1,类似于softmax回归
  • 套用线性回归公式
  • X[b,784] W[784,10] b[10] 得到 [b,10]
  • 高维图片实现非常复杂,一个线性模型无法完成,因此可以添加非线性因子
  • f(X@W+b),使用激活函数让其非线性化,引出relu函数
  • 用了激活函数,模型还是太简单
  • 使用工厂
    • H1 =relu(X@W1+b1)
    • H2 = relu(h1@W2+b2)
    • Out = relu(h2@W3+b3)
  • 第一步,把[1,784]变成[1,512]变成[1,256]变成[1,10]
  • 得到[1,10]后将结果进行独热编码
  • 使用欧氏距离或者使用mse进行误差度量
  • [1,784]通过三层网络输出一个[1,10]

前向传播(张量)- 实战

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets
import os
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# do not print irrelevant information
# os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# x: [60k,28,28]
# y: [60k]
(x, y), _ = datasets.mnist.load_data()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# transform Tensor
# x: [0~255] ==[0~1.]
x = tf.convert_to_tensor(x, dtype=tf.float32) / 255.
y = tf.convert_to_tensor(y, dtype=tf.int32)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f'x.shape: {x.shape}, y.shape: {y.shape}, x.dtype: {x.dtype}, y.dtype: {y.dtype}'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"x.shape: (60000, 28, 28), y.shape: (60000,), x.dtype: <dtype: 'float32'>, y.dtype: <dtype: 'int32'>"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f'min_x: {tf.reduce_min(x)}, max_x: {tf.reduce_max(x)}'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'min_x: 0.0, max_x: 1.0'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f'min_y: {tf.reduce_min(y)}, max_y: {tf.reduce_max(y)}'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'min_y: 0, max_y: 9'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# batch of 128
train_db = tf.data.Dataset.from_tensor_slices((x, y)).batch(128)
train_iter = iter(train_db)
sample = next(train_iter)
f'batch: {sample[0].shape,sample[1].shape}'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'batch: (TensorShape([128, 28, 28]), TensorShape([128]))'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# [b,784] ==> [b,256] ==> [b,128] ==> [b,10]
# [dim_in,dim_out],[dim_out]
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]))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# learning rate
lr = 1e-3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for epoch in range(10):  # iterate db for 10
    # tranin every train_db
    for step, (x, y) in enumerate(train_db):
        # x: [128,28,28]
        # y: [128]

        # [b,28,28] ==> [b,28*28]
        x = tf.reshape(x, [-1, 28*28])

        with tf.GradientTape() as tape:  # only data types of tf.variable are logged
            # x: [b,28*28]
            # h1 = x@w1 + b1
            # [b,784]@[784,256]+[256] ==> [b,256] + [256] ==> [b,256] + [b,256]
            h1 = x @ w1 + tf.broadcast_to(b1, [x.shape[0], 256])
            h1 = tf.nn.relu(h1)
            # [b,256] ==> [b,128]
            # h2 = x@w2 + b2  # b2 can broadcast automatic
            h2 = h1 @ w2 + b2
            h2 = tf.nn.relu(h2)
            # [b,128] ==> [b,10]
            out = h2 @ w3 + b3

            # compute loss
            # out: [b,10]
            # y:[b] ==> [b,10]
            y_onehot = tf.one_hot(y, depth=10)

            # mse = mean(sum(y-out)^2)
            # [b,10]
            loss = tf.square(y_onehot - out)
            # mean:scalar
            loss = tf.reduce_mean(loss)

        # compute gradients
        grads = tape.gradient(loss, [w1, b1, w2, b2, w3, b3])
        # w1 = w1 - lr * w1_grad
        # w1 = w1 - lr * grads[0]  # not in situ update
        # in situ update
        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 % 100 == 0:
            print(f'epoch:{epoch}, step: {step}, loss:{float(loss)}')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
epoch:0, step: 0, loss:0.5366693735122681
epoch:0, step: 100, loss:0.23276552557945251
epoch:0, step: 200, loss:0.19647717475891113
epoch:0, step: 300, loss:0.17389704287052155
epoch:0, step: 400, loss:0.1731622964143753
epoch:1, step: 0, loss:0.16157487034797668
epoch:1, step: 100, loss:0.16654588282108307
epoch:1, step: 200, loss:0.15311869978904724
epoch:1, step: 300, loss:0.14135733246803284
epoch:1, step: 400, loss:0.14423415064811707
epoch:2, step: 0, loss:0.13703864812850952
epoch:2, step: 100, loss:0.14255204796791077
epoch:2, step: 200, loss:0.1302051544189453
epoch:2, step: 300, loss:0.12224273383617401
epoch:2, step: 400, loss:0.12742099165916443
epoch:3, step: 0, loss:0.1219201311469078
epoch:3, step: 100, loss:0.12757658958435059
epoch:3, step: 200, loss:0.11587800830602646
epoch:3, step: 300, loss:0.10984969139099121
epoch:3, step: 400, loss:0.11641304194927216
epoch:4, step: 0, loss:0.11171815544366837
epoch:4, step: 100, loss:0.11717887222766876
epoch:4, step: 200, loss:0.10604140907526016
epoch:4, step: 300, loss:0.10111508518457413
epoch:4, step: 400, loss:0.10865814983844757
epoch:5, step: 0, loss:0.10434548556804657
epoch:5, step: 100, loss:0.10952303558588028
epoch:5, step: 200, loss:0.09875871241092682
epoch:5, step: 300, loss:0.09467941522598267
epoch:5, step: 400, loss:0.10282392799854279
epoch:6, step: 0, loss:0.09874211996793747
epoch:6, step: 100, loss:0.10355912148952484
epoch:6, step: 200, loss:0.09315416216850281
epoch:6, step: 300, loss:0.08971598744392395
epoch:6, step: 400, loss:0.0982089415192604
epoch:7, step: 0, loss:0.09428335726261139
epoch:7, step: 100, loss:0.09877124428749084
epoch:7, step: 200, loss:0.08866965025663376
epoch:7, step: 300, loss:0.08573523908853531
epoch:7, step: 400, loss:0.09440126270055771
epoch:8, step: 0, loss:0.09056715667247772
epoch:8, step: 100, loss:0.09483197331428528
epoch:8, step: 200, loss:0.0849832147359848
epoch:8, step: 300, loss:0.08246967941522598
epoch:8, step: 400, loss:0.09117519855499268
epoch:9, step: 0, loss:0.08741479367017746
epoch:9, step: 100, loss:0.09150294959545135
epoch:9, step: 200, loss:0.08185736835002899
epoch:9, step: 300, loss:0.07972464710474014
epoch:9, step: 400, loss:0.08842341601848602
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
人工智能|TensorFlow前向传播实例
举一个mnist手写数据集的识别的例子,这个数据集在机器学习中是非常经典的数据集,由60k个训练样本和10k个测试样本组成,每个样本都是一张28*28像素的灰度手写数字图片。这些高维图片无法用一个线性模型来实现,因此,就需要用一个非线性模型来实现。下面,就通过方法介绍和代码示例来完成这个实例。
算法与编程之美
2020/04/26
7160
ResNet18-TensorFlow[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144894.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/30
2360
【DL笔记9】搭建CNN哪家强?TensorFlow,Keras谁在行?
从【DL笔记1】到【DL笔记N】,是我学习深度学习一路上的点点滴滴的记录,是从Coursera网课、各大博客、论文的学习以及自己的实践中总结而来。从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现自己的小而有趣的想法......我相信,一路看下来,我们可以感受到深度学习的无穷的乐趣,并有兴趣和激情继续钻研学习。 正所谓 Learning by teaching,写下一篇篇笔记的同时,我也收获了更多深刻的体会,希望大家可以和我一同进步,共同享受AI无穷的乐趣。
beyondGuo
2018/10/25
8460
【DL笔记9】搭建CNN哪家强?TensorFlow,Keras谁在行?
TensorFlow指南(一)——上手TensorFlow
http://blog.csdn.net/u011239443/article/details/79066094 TensorFlow是谷歌开源的深度学习库。不多介绍,相信准备学习TensorFl
小爷毛毛_卓寿杰
2018/04/18
1.1K0
TensorFlow指南(一)——上手TensorFlow
Tensorflow2.0实现VGG13
训练大概50epoch,这里仅仅展示20个,可以看到,验证准确率是在不断的上升的,后面的数据就不展示了,我也没训练完,有兴趣的可以接着跑将模型保存一下,有时间再接着训练
陶陶name
2022/05/12
2400
tf22: ocr识别——不定长数字串识别
该文章介绍了如何使用深度学习模型完成文本分类任务。首先介绍了如何使用RNN和LSTM完成文本分类,然后介绍了如何使用CNN完成文本分类,最后介绍了如何使用GAN完成文本分类。文章还介绍了如何使用预训练模型和迁移学习完成文本分类任务,并给出了具体的代码示例和实验结果。
MachineLP
2018/01/09
2.8K0
tf22: ocr识别——不定长数字串识别
Tensorflow2.0实战之MNSIT数据集
整体上使用起来比1.X版本有顺手多了,感觉和pytorch差不多,使用起来更加的丝滑流畅,真的是对这个版本爱不释手了,如果要是再有一张性能好一些的显卡就更好了
陶陶name
2022/05/12
3540
Tensorflow2.0实战之Auto-Encoder
例如,Mnist的一张图片大小为784维,将图片放到Encoder中进行压缩,编码code使得维度小于784维度,之后可以将code放进Decoder中进行重建,可以产生同之前相似的图片。
陶陶name
2022/05/13
3710
基于神经网络——鸢尾花识别(Iris)
鸢尾花识别是学习AI入门的案例,这里和大家分享下使用Tensorflow 2框架,编写程序,获取鸢尾花数据,搭建神经网络,最后训练和识别鸢尾花。
一颗小树x
2021/05/18
6.9K0
基于神经网络——鸢尾花识别(Iris)
GitHub 标星 3.6k,一本开源的深度学习中文教程!
深度学习中绕不开的便是对算法框架的实际使用了。如果没有娴熟的工程实践能力,很多优秀的算法设计就无法真正使用。TensorFlow2.0 正式版已发布了一段时间,然而过去使用 TensorFlow1.x 版本的开发者担心两个版本之间的差距过大以至于无法迁移已有的经验,刚入门深度学习的人则因为 TensorFlow 那不友好的 API 和设计逻辑而望而却步。
GitHubDaily
2019/11/20
1K0
GitHub 标星 3.6k,一本开源的深度学习中文教程!
TensorFlow 2.0中文开源书项目:日赞700,登上GitHub热榜
深度学习中绕不开的便是对算法框架的实际使用了。如果没有娴熟的工程实践能力,很多优秀的算法设计就无法真正使用。TensorFlow2.0 正式版已发布了一段时间,然而过去使用 TensorFlow1.x 版本的开发者担心两个版本之间的差距过大以至于无法迁移已有的经验,刚入门深度学习的人则因为 TensorFlow 那不友好的 API 和设计逻辑而望而却步。
机器之心
2019/11/18
5890
TensorFlow 2.0中文开源书项目:日赞700,登上GitHub热榜
TF-char4-TF2基本语法
TensorFlow是一个面向深度学习算法的科学计算库,内部数据保存在张量Tensor对象中,所有的运算操作都是基于张量进行的
皮大大
2021/03/02
1.6K0
tensorflow mnist神经网络示例
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/79704120
bear_fish
2018/09/14
8150
tensorflow mnist神经网络示例
TF-char8-Keras高层接口
文件中保存的仅仅是参数张量的数值,没有其他的结构参数,需要使用相同的网络结构才能恢复网络数据,一般在拥有源文件的情况下使用。
皮大大
2021/03/02
4910
tensorflow 1.01中GAN(生成对抗网络)手写字体生成例子(MINST)的测试
为了更好地掌握GAN的例子,从网上找了段代码进行跑了下,测试了效果。具体过程如下: 代码文件如下: import tensorflow as tf from tensorflow.examples.
sparkexpert
2018/01/09
1.3K0
tensorflow 1.01中GAN(生成对抗网络)手写字体生成例子(MINST)的测试
tensorflow中实现神经网络训练手写数字数据集mnist
基于tensorflow实现一个简单的三层神经网络,并使用它训练mnist数据集,神经网络三层分别为:
OpenCV学堂
2018/07/26
1K0
tensorflow中实现神经网络训练手写数字数据集mnist
2个范例带你读懂TensorFlow2低阶API构建模型方法
下面的范例使用TensorFlow的低阶API实现线性回归模型和DNN二分类模型。
lyhue1991
2020/07/20
1.2K0
2个范例带你读懂TensorFlow2低阶API构建模型方法
一看就懂的Tensorflow实战(TensorBoard高级篇)
[TensorBoard: 图表可视化]http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/graph_viz.html
AI异构
2020/07/29
4790
一看就懂的Tensorflow实战(TensorBoard高级篇)
Hello TensorFlow : MINST数据集识别
我们需要做的就是通过算法让电脑能够识别出图片中的数字,是不是像识别验证码一样。 本文会介绍两种方法:
Awesome_Tang
2018/12/27
1.2K0
ResNet18代码实现[通俗易懂]
from tensorflow.keras import layers, Sequential, Model, datasets, optimizers
全栈程序员站长
2022/08/24
1K0
推荐阅读
相关推荐
人工智能|TensorFlow前向传播实例
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文