基本使用

基本使用
以数据流图为表达形式,每一个节点会获得0个或多个(数据)
import tensorflow as tf'''"/cpu:0": 机器的 CPU."/gpu:0": 机器的第一个 GPU, 如果有的话."/gpu:1": 机器的第二个 GPU, 以此类推.'''tf.device("/cpu:0")#创建一个节点matri1matri1 = tf.constant([[3.,3.]]) #定义常量矩阵1*2#创建一个节点matri2matri2 = tf.constant([[2.],[2.]])#定义常量矩阵2*2#创建矩阵乘法prduct = tf.matmul(matri1,matri2)#这里存在三个节点#在一个会话中启动图sess = tf.Session()# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数.# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回# 矩阵乘法 op 的输出.# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.# 返回值 'result' 是一个 numpy `ndarray` 对象.result = sess.run(prduct)print(result)#任务完成,结束会话 。# sess.clase()'''可以使用with完成代码块激活'''with tf.Session() as sess: result = sess.run(prduct)print(result)
【基本使用】实现MNIST
是一个非常强大的用来做大规模数值计算的库 。其所擅长的任务之一就是实现以及训练深度神经网络 。
:列表【】(# 列表(打了激素的数组): 可以存储任意数据类型的集和 。)
元组()(一旦定义了数值就没有办法修改!)

基本使用

文章插图
利于机器学习实现手写字体代码 。
import tensorflow.examples.tutorials.mnist.input_data as input_datamnist = input_data.read_data_sets("MNIST_data/",one_hot = True)import tensorflow as tf'''x不是一个特定的事,而是一个占位符 。float32是tf最常用的数据格式 。定义个列表[]里面是数值是可以变化的量 。我们用2维的浮点数张量来表示这些图,这个张量的形状是[None,784 ] 。(这里的None表示此张量的第一个维度可以是任何长度的 。)'''x = tf.placeholder(tf.float32,[None,784])'''一个Variable代表一个可修改的张量,对于各种机器学习应用,一般都会有模型参数,可以用Variable表示 。tf.zeros创建一个初始化全为0的数值w的维度是[784,10],一张图像输入28*28,总共10个分类,就会有{784*photo*10]个权重参数B的维度是[10],每一个类别都会有1个偏置 。'''W = tf.Variable(tf.zeros([784,10]))B = tf.Variable(tf.zeros([10]))'''首先,我们用tf.matmul(??X,W)表示x乘以W,对应之前等式里面的,这里x是一个2维张量拥有多个输入 。然后再加上b,把和输入到tf.nn.softmax函数里面 。经过Softmax之后(0.3,0.05,0.05,0.1,0.1. 。。。。。。)10个数值'''y = tf.nn.softmax(tf.matmul(x,W)+B)'''训练模型:定义指标来评估模型的好坏,指标一般是loss(损失) 。最常见的函数是”交叉熵”cross_entropy我们需要定义一个新的,正确的占位符来表示正确的输入 。'''y_ = tf.placeholder(tf.float32,[None,10])'''计算交叉熵:假设有一个三分类问题,某个样例的正确答案是(1,0,0) 。某模型经过softmax回归之后的预测答案是(0.5,0.4,0.1),那么这个预测和正确答案之间的交叉熵为:正确答案((1,0,0),预测(0.5,0.4,0.1))= -(1*log0.5+0*log0.4+0*log0.1)≈0.3用 tf.reduce_sum 计算张量的所有元素的总和 。(注意,这里的交叉熵不仅仅用来衡量单一的一对预测和真实值,而是所有100幅图片的交叉熵的总和 。对于100个数据点的预测表现比单一数据点的表现能更好地描述我们的模型的性能 。'''cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) #得出loss'''定义一个optimizer优化器(梯度下降算法),以0.01的学习率最小化交叉熵'''Optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)'''定义完模型之后,运行之前需要对所有的变量进行初始化的操作 。'''init = tf.global_variables_initializer() #最新版的定义全局初始化 。'''在Session里面启动我们的模型'''sess = tf.Session()sess.run(init)'''训练模型mnist.train.next_batch 随机从mnist中抽取100张图片训练,feed_dict:填充前面占位符的x和y'''for i in range(1000):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(Optimizer, feed_dict={x: batch_xs, y_: batch_ys})'''tf.argmax用途:返回最大的那个数值所在的下标(第一个参数是矩阵,第二个参数是0或者1 。0表示的是按列比较返回最大值的索引,1表示按行比较返回最大值的索引) 。tf.equal:判断真实和预测值是否相同 。例如真实值是[0,0,1],预测是[0.6,0.3,0.1],经过argmax之后返回3和1,经过equal判断后结果为False下面一行代码只会输出True和False 。'''correct_prrediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))'''tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值 。'''accuracy = tf.reduce_mean(tf.cast(correct_prrediction,"float32"))'''我们计算所学习到的模型在测试数据集上面的正确率 。'''print(sess.run(accuracy,feed_dict={x:mnist.test.images,y_: mnist.test.labels}))