Tensorflow.keras小案例Mnist数字识别

本文介绍了Tensorflow2.x的基础理论,包括张量操作、Eager Execution和AutoGraph,并通过MNIST手写体识别案例展示了Tensorflow2.x的网络层构建、模型训练和评估过程。
摘要由CSDN通过智能技术生成

1. 深度学习框架

① 主流框架:封装了优化器和反向传播算法等  

                       Google的Tensorflow、Facebook的Pytorch、华为的MindSpore、Caffe、theano、MXNet、CNTK

② Pytorch的特点:Python优先:保证代码基本跟原生的python实现一致

                               动态神经网络:Pytorch的程序可以在执行时动态构建/调整计算图

                               易于Debug:运行时可以生成动态图,开发者可以在调试器中停掉解释器并查看某个节点的输出

                               Pytorch提供了支持 CPU和 GPU的Tensor,加速计算           

   Tensorflow1.x的弊端:静态计算图(调试困难,API混乱)

                                       TensorFlow1.0里在创建了Tensor之后,不能直接返回结果。而是需要创建session会话机制

                                       ,包含graph的概念在里面,而且需要session.run才能运行。

   Tensorflow2.x的优点:Keras高级接口、去掉了graph和session机制、标准化了API、动态图机制:Eager execution         

                                       多语言、多平台:Python、C++、go、java; 从手机到计算机集群都能生成你的训练模型

                                       分布式、运算性能强:多进程,不同服务器并行运算;在谷歌的AI芯片TPU上运行性能是最好的  

2. TensorFlow2基础理论

  ① 张量(tensor):一个多维的数组;常量:储存超参数;变量:存储权重和矩阵

  ② 常量创建方式:

const_a = tf.constant([[1,2,3,4]],shape=[2,2],dtype=tf.float32) # 创建常量tensor浮点型2x2矩阵
a.numpy()  --> [[1. 2.] [3. 4.]]                                # 常量数值读取
zeros_b = tf.zeros(shape=[2, 3], dtype-tf.int32)                # 创建2x3矩阵,元素值均为0
zeros_like_c = tf.zeros_like(const_a)                           # 全零矩阵和张量const_a的形状是一样的
fill_d = tf.fil1([3,3],8)                                      # 用一个具体值充满张量
random_e = tf.random.normal([5,5],mean=0,stddev=1.0)            # 创建正态分布的张量,均值为0,标准差为1
list_f =[1,2,3,4,5,6] 
tensor_f = tf.convert_to_tensor(list_f,dtype=tf.float32)        # 转化为张量类型,变成6维向量

  ③ 变量的创建方式:

var_1 = tf.Variable(tf.ones([2,3]))                             # 创建变量,只需提供初始值
var_1.read_value()
tf.Tensor([[1. 1. 1.][1. 1. 1.]],shape=(2,3),dtype=float32)     # 变量数值读取 
var_1.assign_add(tf.ones([2,3]))                                # 变量加法,每个数字加1

  ④ 张量的切片与索引:

索引:
tensor_h= tf.random.normal([4,100,100,3])                       # 包含4张图片,每张图片大小100*100*3 
tensor_h[0][20][40][1]                                          # 取出第一张图片第二个通道中在[20,40]位置的像素点  
tf.Tensor: shape=o, dtype=float32,numpy=-1.8221084>            # CPU:MHWC 样本数量 高 宽 维度; GPU(CUDA):NCHW
indices = [0,1,3] tf.gather(tensor_h,axis=O,indices=indices)    # 取出tensor_h([4,100,100,3])中的第1,2,4张图像。
indices =[[0,1,1,0],[1,2,2,0]]                                 # 取出tensot_h([4,100,100,3])中,
tf.gather_nd(tensor_h,indices=indices)                          # 第一张图像第一个维度[1,1]的像素点;第二张图片第一像素点[2,2]的像素点
切片:
tensor_h[0, :, :, :]                                            # 取出第一张图片
tensor_hl[: : 2, ...]                                           # 每两张图片取出一张的切片
tensor_hl[: : -1]                                               # 倒序切片 

[start: end]                                                    # 从tensor的开始位置到结束位置的数据切片;
[start :end :step]或者[::step]                                  # 从tensor的开始位置到结束位置每隔step的数据切片
[::-1]                                                          # 负数表示倒序切片
‘...’                                                           # 任意长

  ⑤ 张量的维度变化

# 查看维度常用的三种方式
const_d_1.shape        (2,2)  
const_d_1.get_shape()  (2,2)
tf.shape(const_d_1)    tf.Tensor([2 2],shape=(2,),dtype=int32)  # 输出为张量类型对象
# 维度重组
reshape_l = tf.constant([[1,2,3],[4,5,6]])
tf.reshape(reshape_1,(3,2))                                     # 将2*3重组为3*2
# 维度增加(在cpu中的NHWC数据格式)
expand_sample_1.shape                                           # 原始数据尺寸:(100,100,3)
tf.expand_dims(expand_sample_1,axis=0).shape)                  # 在第一个维度前增加:(1,100,100,3) 
tf.expand_dims(expand_sample_l,axis=1).shape)                  # 在第二个维度前增加:(100,1,100,3) 
,tf.expand_dims(expand_sample_l, axis=-1).shape)               # 在最后一个维度后增加:(100,100,3,1)
# 维度减少(数据可视化用matplotlib、opencv)                  
squeeze_sample_1.shape                                          # 原始数据尺寸:(1,100,100,3)
t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值