DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略(三)

简介: DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

2、相关概念


1、张量(tensor)


    TensorFlow 中的核心数据单位是张量(tensor)。一个张量由一组形成阵列(任意维数)的原始值组成。张量的阶(rank)是它的维数,而它的形状(shape)是一个整数元组,指定了阵列每个维度的长度。以下是张量值的一些示例:


3.    # a rank 0 tensor; a scalar with shape [],

[1., 2., 3.] # a rank 1 tensor; a vector with shape [3]

[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]

[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]

     TensorFlow 使用numpy数组来表示张量值。

     tf.Tensor 具有以下属性:


数据类型(例如float32、int32 或string)

形状

     张量中的每个元素都具有相同的数据类型,且该数据类型一定是已知的。形状,即张量的维数和每个维度的大小,可能只有部分已知。如果其输入的形状也完全已知,则大多数操作会生成形状完全已知的张量,但在某些情况下,只能在执行图时获得张量的形状。


(1)、阶(rank)和形状(shape)

     tf.Tensor 对象的阶是它本身的维数。阶的同义词包括:秩、等级或n 维。请注意,TensorFlow 中的阶与数学中矩阵的阶并不是同一个概念。如下表所示,TensorFlow 中的每个阶都对应一个不同的数学实例:

    张量的形状是每个维度中元素的数量。TensorFlow 在图的构建过程中自动推理形状。这些推理的形状可能具有已知或未知的阶。如果阶已知,则每个维度的大小可能已知或未知。TensorFlow 文件编制中通过三种符号约定来描述张量维度:阶,形状和维数。下表阐述了三者如何相互关联:


image.pngimage.png


image.png


TensorFlow的使用方法


TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现


1、基础函数

sess.run()  

#当我们构建完图后,需要在一个会话中启动图,启动的第一步是创建一个Session对象。  为了取回(Fetch)操作的输出内容, 可以在使用 Session 对象的 run()调用执行图时,传入一些 tensor, 这些 tensor 会帮助你取回结果。那么调用sess.run()的时候,ensorflow并没有计算整个图,只是计算了与想要fetch 的值相关的部分。

占位符和 feed_dict  :占位符并没有初始值,它只会分配必要的内存。在会话中,占位符可以使用 feed_dict 馈送数据。  feed_dict 是一个字典,在字典中需要给出每一个用到的占位符的取值。在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,那么 TensorFlow 的计算图会非常大。因为每增加一个常量,TensorFlow 都会在计算图中增加一个结点。所以说拥有几百万次迭代的神经网络会拥有极其庞大的计算图,而占位符却可以解决这一点,它只会拥有占位符这一个结点。


2、输出tensorflow的版本号


import tensorflow as tf

print('输出tensorflow的版本:',tf.__version__)


案例应用


DL框架之Tensorflow:Tensorflow中常用函数的简介、使用方法之详细攻略


1、使用常量和占位符进行计算


#使用常量和占位符进行计算:其中 y_1 的计算过程使用占位符,而 y_2 的计算过程使用常量

w1=tf. Variable (tf.random_normal([ 1 , 2 ],stddev= 1 ,seed= 1 ))  #因为需要重复输入x,而每建一个x就会生成一个结点,计算图的效率会低。所以使用占位符

x=tf.placeholder(tf.float32,shape=( 1 , 2 ))

x1=tf.constant([[ 0.7 , 0.9 ]])

a=x+w1

b=x1+w1

sess=tf. Session ()

sess.run(tf.global_variables_initializer())  #运行y时将占位符填上,feed_dict为字典,变量名不可变

y_1=sess.run(a,feed_dict={x:[[ 0.7 , 0.9 ]]})

y_2=sess.run(b)

print (y_1)

print (y_2)

sess.close




2、输出w、b和计算两个数值相乘


import tensorflow as tf

import numpy as np

W = tf.Variable(np.arange(6).reshape((2, 3)), dtype=tf.float32, name="weights")

b = tf.Variable(np.arange(3).reshape((1, 3)), dtype=tf.float32, name="biases")

 

saver = tf.train.Saver()

with tf.Session() as sess:

   saver.restore(sess, "niu/save_net.ckpt")

   print("weights:", sess.run(W))

   print("biases:", sess.run(b))

import tensorflow as tf

#构建一个计算图

a=tf.constant([1.0, 2.0])

b=tf.constant([3.0, 4.0])

c=a*b  

#T1、传统的方法,先构建再释放

sess=tf.Session()   #构建一个Session

print(sess.run(c))  #把计算图放到session里,并运行得到结果

sess.close()        #关闭session释放资源

#T2、with语句的方法,先构建再释放

with tf.Session() as sess:

   print(sess.run(c))  #把计算图放到session里,并运行得到结果


3、ML之LoR:利用LoR算法(tensorflow)对mnist数据集实现手写数字识别

import tensorflow as tf

import numpy as np

from tensorflow.examples.tutorials.mnist import input_data

#1、定义数据集:mnist

mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

trainimg       =  mnist.train.images

trainimg_label =  mnist.train.labels

testimg        =  mnist.test.images

testimg_label  =  mnist.test.labels

print(trainimg_label[0]) #输出第一行label值

#2、定义x、y、w、b:tf.placeholder占位符、tf.Variable变量

x = tf.placeholder("float",[None,784])  # [None,784]样本的个数(无限大),每个样本的特征(784个像素点)

y = tf.placeholder("float",[None,10])   #样本的类别(10个)

W = tf.Variable(tf.zeros([784,10]))     #每个特征(784个像素点)对应输出10个分类值

b = tf.Variable(tf.zeros([10]))

#3、模型预测:LoR(softmax多分类)

#3.1、定义计算损失:actv、cost

actv = tf.nn.softmax(tf.matmul(x,W)+b)                                     #计算属于正确类别的概率值

cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(actv),reduction_indices=1))  #计算损失值(预测值与真实值间的均方差)

#3.2、定义模型训练:learning_rate、optm:

#(1)、采用GD优化参数w、b,最小化损失值

learning_rate=0.01                    

optm = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #学习率为0.01

# optimizer = tf.train.GradientDescentOptimizer(0.01)                    #学习率为0.01

# optm = optimizer.minimize(cost)                                        #最小化损失值

#3.3、定义模型的pred、accr

pred =    tf.equal(tf.argmax(actv,1),tf.argmax(y,1))  #预测值:equal返回的值是布尔类型,argmax返回矩阵中最大元素的索引,0,代表列方向;1代表行方向        

accr =    tf.reduce_mean(tf.cast(pred,"float"))       #准确率,cast进行类型转化 (true为1,false为0)                

#3.4、定义模型训练参数init_op、train_epochs、batch_size、display_step

init_op = tf.global_variables_initializer()       #初始化所有variables 的op

train_epochs = 50   #将所有样本迭代50次

batch_size = 100       #每次迭代选择样本的个数                

display_step =5        #每进行5个epoch进行一次展示              

#3.5、运行模型tf.Session()

with tf.Session() as sess:             #在session中启动graph

   sess.run(init_op)                      #启动运行使用variables的op

   for epoch in range(train_epochs):

     

       #(1)、定义avg_cost、num_batch

       avg_cost =0.0  #初始化损失值

       num_batch = int(mnist.train.num_examples/batch_size)

     

       #(2)、for循环实现num_batch批量训练

       for i in range(num_batch):

           batch_xs, batch_ys = mnist.train.next_batch(batch_size)  #以batch为单位逐次进行

           sess.run(optm,feed_dict={x: batch_xs,y: batch_ys})       #给x,y赋值

           feeds={x: batch_xs,y: batch_ys}  

           avg_cost +=sess.run(cost,feed_dict= feeds)/num_batch

         

      #(3)、if判断实现每轮结果输出:输出每轮(5个epoch)的cost、trian_acc、test_acc

       if epoch %  display_step == 0:

           feeds_train = {x: batch_xs,y: batch_ys}        

           feeds_test  = {x:mnist.test.images,y: mnist.test.labels}

           train_acc   =  sess.run(accr,feed_dict= feeds_train)

           test_acc    =  sess.run(accr,feed_dict= feeds_test)        

           print("Epoch: %03d/%03d cost:%.9f trian_acc: %.3f test_acc: %.3f"

                % (epoch,train_epochs,avg_cost,train_acc,test_acc))        

print("Done")        


相关文章
|
2月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
4118 3
|
23天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
39 7
|
26天前
|
机器学习/深度学习 自然语言处理 并行计算
DeepSpeed分布式训练框架深度学习指南
【11月更文挑战第6天】随着深度学习模型规模的日益增大,训练这些模型所需的计算资源和时间成本也随之增加。传统的单机训练方式已难以应对大规模模型的训练需求。
82 3
|
2月前
|
PyTorch TensorFlow 算法框架/工具
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
本文提供了在Ubuntu 18.04操作系统的NVIDIA Jetson平台上安装深度学习和计算机视觉相关库的详细步骤,包括PyTorch、OpenCV、ONNX、TensorFlow等。
54 1
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
|
2月前
|
并行计算 TensorFlow 算法框架/工具
tensorflow安装
tensorflow安装——GPU版
46 2
|
2月前
|
并行计算 PyTorch TensorFlow
环境安装(一):Anaconda3+pytorch1.6.0+cuda10.0+cudnn7.6.4+tensorflow1.15+pycocotools+pydensecrf
这篇文章详细介绍了如何在Anaconda环境下安装和配置深度学习所需的库和工具,包括PyTorch 1.6.0、CUDA 10.0、cuDNN 7.6.4、TensorFlow 1.15、pycocotools和pydensecrf,并提供了pip国内镜像源信息以及Jupyter Notebook和Anaconda的基本操作。
148 0
环境安装(一):Anaconda3+pytorch1.6.0+cuda10.0+cudnn7.6.4+tensorflow1.15+pycocotools+pydensecrf
|
4月前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
54 0
|
4月前
|
UED 开发者
哇塞!Uno Platform 数据绑定超全技巧大揭秘!从基础绑定到高级转换,优化性能让你的开发如虎添翼
【8月更文挑战第31天】在开发过程中,数据绑定是连接数据模型与用户界面的关键环节,可实现数据自动更新。Uno Platform 提供了简洁高效的数据绑定方式,使属性变化时 UI 自动同步更新。通过示例展示了基本绑定方法及使用 `Converter` 转换数据的高级技巧,如将年龄转换为格式化字符串。此外,还可利用 `BindingMode.OneTime` 提升性能。掌握这些技巧能显著提高开发效率并优化用户体验。
67 0
|
16天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
61 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
16天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
51 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型