深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)
1. tf.matmul(X, w) # 进行点乘操作
参数说明:X,w都表示输入的数据,
2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False
参数说明:x,y表示需要比较的两组数
3.tf.cast(y, 'float') # 将布尔类型转换为数字类型
参数说明:y表示输入的数据,‘float’表示转换的数据类型
4.tf.argmax(y, 1) # 返回每一行的最大值的索引
参数说明:y表示输入数据,1表示每一行的最大值的索引,0表示每一列最大值得索引
5.tf.nn.softmax(y) # 对每一行数据,按照softmax方式,计算其概率值
参数说明:y表示输入的数据
6.tf.train.GradientDescentOptimizer(0.05).minimize(loss) # 对损失值采用梯度下降的方法进行降低操作
参数说明:0.05表示学习率的大小,loss表示损失值
代码说明:相较于上一个线性拟合的代码,逻辑回归的代码,使用了tf.placeholder()进行数据输入的占位,
预测结果等价于tf.matmul(X, w) + b,作为预测结果
代码:
第一步:载入mnist数据集
第二步:超参数的设置,包括输入样本的维度,分类的类别数,一个batch的大小,以及迭代的次数
第三步:使用tf.placeholder() 构造X特征和y标签
第四步:使用tf.Variable(tf.random_normal([inputSize, num_classes]))构造W和b
第五步:使用tf.matmul获得预测得分值,使用tf.nn.softmax() 将得分值转换为概率值
第六步:使用L2损失值,即均分误差作为损失值
第七步:使用tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss), 对损失值进行梯度下降
第八步:使用tf.equal(tf.argmax(y_pred), tf.argmax(y)) 获得两个标签的最大值索引是否一致,再使用tf.reduce_mean(tf.cast()) 计算准确率
第九步:循环,使用mnist.train.next_batch进行训练数据的部分数据的读取
第十步:sess.run([optm, loss], feed_dict={X:batch[0], y:batch[1]}) # 执行损失值和梯度下降降低损失值,从而更新参数
第十一步:每迭代1000次,打印部分数据的准确率
第十二步:打印测试数据部分的准确率
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data # 第一步:mnist数据集的载入
mnist = input_data.read_data_sets('/data', one_hot=True) # 第二步:初始超参数的设置
# 输入层的维度
inputSize = 784
# 分类的类别数
num_classes = 10
# 每一次参数更新的batchSize
batch_size = 64
# 循环的次数
trainIteration = 50000 # 第三步:输入数据初始化操作, 进行一个占位操作
# X的维度为[-1, inputSize]
X = tf.placeholder(tf.float32, [None, inputSize])
# y的维度为[-1, num_classes]
y = tf.placeholder(tf.float32, [None, num_classes])
# 第四步:变量的初始化操作
# W1进行正态参数初始化,维度为[inputSize, num_classes]
W1 = tf.Variable(tf.random_normal([inputSize, num_classes], stddev=0.1))
# b1进行全零初始化,维度为[num_classes]
b1 = tf.Variable(tf.zeros([num_classes]))
# 第五步:使用tf.matmul进行预测操作, 使用softmax计算概率值,扩大类别差距
y_pred = tf.nn.softmax(tf.matmul(X, W1) + b1)
# 第六步:使用L2 loss计算损失值, tf.reduce_mean求出所有的损失值的平均值
loss = tf.reduce_mean(tf.square(y-y_pred))
# 第七步:使用梯度下降法,对loss进行降低
opt = tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)
# 第八步:判断预测结果的最大值和真实值之间是否相等,使用True和False表示
correct_pred = tf.equal(tf.argmax(y_pred, 1), tf.argmax(y, 1))
# 使用tf.cast将布尔类型转换为float类型,使用reduce_mean求平均值
accr = tf.reduce_mean(tf.cast(correct_pred, 'float'))
# 变量初始化
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init) for i in range(trainIteration):
# 第九步:使用mnist.train.next_batch 获得一个batch的数据
bacth = mnist.train.next_batch(batch_size)
# 第十步:使用sess.run执行梯度下降和loss操作,输入的参数为batch_X和batch_y数据
_, loss = sess.run([opt, loss], feed_dict={X:bacth[0], y:bacth[1]})
# 第十一步:如果迭代1000次,打印当前训练数据的准确率
if i % 1000 == 0:
print('train accr %g'%(sess.run(accr, feed_dict={X:bacth[0], y:bacth[1]})))
# 第十二步:打印测试数据的batch_size的准确率
batch = mnist.test.next_batch(batch_size)
print('test accr %g'%(sess.run(accr, feed_dict={X: batch[0], y: batch[1]})))
深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)的更多相关文章
- 深度学习原理与框架-Tensorflow基本操作-变量常用操作 1.tf.random_normal(生成正态分布随机数) 2.tf.random_shuffle(进行洗牌操作) 3. tf.assign(赋值操作) 4.tf.convert_to_tensor(转换为tensor类型) 5.tf.add(相加操作) tf.divide(相乘操作) 6.tf.placeholder(输入数据占位
1. 使用tf.random_normal([2, 3], mean=-1, stddev=4) 创建一个正态分布的随机数 参数说明:[2, 3]表示随机数的维度,mean表示平均值,stddev表示 ...
- 深度学习原理与框架-Tensorflow基本操作-实现线性拟合
代码:使用tensorflow进行数据点的线性拟合操作 第一步:使用np.random.normal生成正态分布的数据 第二步:将数据分为X_data 和 y_data 第三步:对参数W和b, 使用t ...
- 深度学习原理与框架-Tensorflow基本操作-Tensorflow中的变量
1.tf.Variable([[1, 2]]) # 创建一个变量 参数说明:[[1, 2]] 表示输入的数据,为一行二列的数据 2.tf.global_variables_initializer() ...
- 深度学习原理与框架-Tensorflow卷积神经网络-cifar10图片分类(代码) 1.tf.nn.lrn(局部响应归一化操作) 2.random.sample(在列表中随机选值) 3.tf.one_hot(对标签进行one_hot编码)
1.tf.nn.lrn(pool_h1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) # 局部响应归一化,使用相同位置的前后的filter进行响应归一化操作 参数 ...
- 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)
1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME') # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...
- 深度学习原理与框架-Tensorflow卷积神经网络-神经网络mnist分类
使用tensorflow构造神经网络用来进行mnist数据集的分类 相比与上一节讲到的逻辑回归,神经网络比逻辑回归多了隐藏层,同时在每一个线性变化后添加了relu作为激活函数, 神经网络使用的损失值为 ...
- 深度学习原理与框架-Alexnet(迁移学习代码) 1.sys.argv[1:](控制台输入的参数获取第二个参数开始) 2.tf.split(对数据进行切分操作) 3.tf.concat(对数据进行合并操作) 4.tf.variable_scope(指定w的使用范围) 5.tf.get_variable(构造和获得参数) 6.np.load(加载.npy文件)
1. sys.argv[1:] # 在控制台进行参数的输入时,只使用第二个参数以后的数据 参数说明:控制台的输入:python test.py what, 使用sys.argv[1:],那么将获得w ...
- 深度学习原理与框架-递归神经网络-时间序列预测(代码) 1.csv.reader(进行csv文件的读取) 2.X.tolist(将数据转换为列表类型)
1. csv.reader(csvfile) # 进行csv文件的读取操作 参数说明:csvfile表示已经有with oepn 打开的文件 2. X.tolist() 将数据转换为列表类型 参数说明 ...
- 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 1.cv2.resize(图片压缩) 2..get_shape()[1:4].num_elements(获得最后三维度之和) 3.saver.save(训练参数的保存) 4.tf.train.import_meta_graph(加载模型结构) 5.saver.restore(训练参数载入)
1.cv2.resize(image, (image_size, image_size), 0, 0, cv2.INTER_LINEAR) 参数说明:image表示输入图片,image_size表示变 ...
随机推荐
- Foxmail Gmail Outlook
三个邮件客户端都比较好,但是作为用户精力是非常有限地,必须优中选优. 我选outlook,非常值得拥有. 理由如下: (1)和office完美契合 (2)和生产环境完美契合 (3)免费 (4)良好地任 ...
- Spring4.0之四:Meta Annotation(元注解)
Spring框架自2.0开始添加注解的支持,之后的每个版本都增加了更多的注解支持.注解为依赖注入,AOP(如事务)提供了更强大和简便的方式.这也导致你要是用一个相同的注解到许多不同的类中去.这篇文章介 ...
- 解决 https urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] 错误
import ssl ssl._create_default_https_context = ssl._create_unverified_context
- IIS 反向代理设置
http://blog.csdn.net/yuanguozhengjust/article/details/23576033
- conda命令
- Java基础知识_毕向东_Java基础视频教程笔记(26 反射)
Java反射机制: 是在运行状态中,对于任意一个类(class)文件,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性.这种动态获取的信息以及动态调用对象的方法的功 ...
- JSP:注册&登录
数据库:Mysql 除了_id自动增长,其余全是varchar 注册:register.jsp <%@ page language="java" import="j ...
- Java - 19 Java 异常处理
Java 异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用 ...
- 《SDN软件定义网络从入门到精通》导论课
http://mp.weixin.qq.com/s?__biz=MjM5MTM3MzIzMg==&mid=209513316&idx=1&sn=e5dbd9a2ccccb88d ...
- .Net 大型分布式基础服务架构横向演变概述(转)
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...