深度学习_1_Tensorflow_1
# 深度学习
# 图像识别,自然语言处理
# 机器学习 深度学习
# 分类:神经网络(简单) 神经网络(深度)
# 回归 图像:卷积神经网络
# 自然语言处理:循环神经网络
# cpu:运行操作系统,处理业务,计算能力不是特别突出
# gpu:专门为计算设计的
import tensorflow as tf
a = tf.constant(5.0)
b = tf.constant(6.0)
sum1 = tf.add(a,b) # 在session外边打印时只能查看对象
# 程序的图 a,b,sum1也有graph
graph = tf.get_default_graph()
print(a.graph)
print(graph)
# session()运行默认的图,当运行的元素不是默认图的时候,会报错
with tf.Session() as sess:
print(sess.run(sum1)) # 输出值
# 创建新的图
g = tf.Graph()
with g.as_default():
c = tf.constant(11.0)
print(c.graph) # 与上边的图不同 # 图程序的空间,变量,线程等资源都在图中
# 会话运行图的程序,
# tf.Session(graph=c) 指定图运行, 里边run的时候要注意
# session.run的作用:启动整个图
# session.close:关闭,释放资源河
# Session中的参数
# tf.Session(config=tf.ConfigProto(log_device_placement=True))
# 交互式session:tf.InteractiveSession()
# 调用后,不用Session() 不同run 直接a.eval()也可
# 其实只要有会话的上下文环境,就可以使用eval()
# ===================================================
# 会话的run()
# run(fetches,feed_dict=None,graph=None) 运行ops与tensor
# fetches 需要run的内容 有多个时使用[]
# 不是op不能run 例:sum2 = 1+3
# 但 sum3=1+tf.constant(3.0) 可以run(sum3)
# ========================================
# 实时提供数据
# placeholder
# tf.placeholder(dtype,shape=None,name=None)
# plt = tf.placeholder(tf.float32,[2,3]) [None,3]也可
# run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]})
input1 = tf.placeholder(tf.float32) # 可以说是一个占位符,使用的时候需要传入值
input2 = tf.placeholder(tf.float32) output = input1*input2
with tf.Session() as sess: # 传值的时候使用feed_dict 字典 占位符对象作为键,值需要使用[] 包含
print(sess.run(output,feed_dict={input1:[7],input2:[2.6]}))
# =============================================================
# 张量tensor
# 将numpy中的数组封装为tensor类型
# tensor:名字,shape,dtype
# 阶:维度
# 数据类型:tf.float32,64(其实没有意义,实际还是32) int8-64,uint8,string,bool
# print(a.shape,a.name,a.op,a.graph)
# 0维:() 1维:(n) 2维:(n,m) ...
# ======================================
# Numpy:reshape 把原来的数据直接修改
# tensorflow中
# tf.reshape:创建新的张量 动态形状
# tf.Tensor.set_shape:更新Tensor的静态形状
# 静态形状 (当数量不确定时可以,切不能跨维度)
plt = tf.placeholder(tf.float32,[None,2]) # shape=(?,2)
plt.set_shape([3,2]) # shape=(3,2)
plt.set_shape([4,2]) # 此时不能修改
# 动态形状 (注意元素个数不能改变,可跨维度)
new_plt=tf.reshape(plt,[2,3]) # shape=(2,3)
# ==========================================
# 有默认值的张量
# tf.zero(shape,dtype=tf.float32,name=None) 全为0
# tf.ones(shape,dtype=float32,name=None) 全为1
# tf.constant(value,dtype=None,shape=None,name=None) 常量张量
# tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=float32,seed=None,name=None) 由正太分部的随机值组成的矩阵
# ==========================
# 张量的类型变换
# tf.string_to_number(string_tensor,out_type=None,name=None) 等
# tf.cost(x,dtype,name=None) 万能转换
# tf.cost(原来数据,新类型)
# ===========================
# 数据拼接 a=[[1,2,3],[4,5,6]] b = [[7,8,9],[10,11,12]]
# tf.concat([a,b],axis=1) 合并后变为6列
# api https://www.tensorflow.org/versions/r1.0/api_guides/python/math_ops
# ===================================================
# 变量op 可以持久化, 普通的张量op不行
# 变量op需要在会话中运行初始化
# name参数:在tensorboard中显示名字,可以让相同op名字的数据进行区分
# 设置后 Tensor("Variable") ---->Tensor("设置的name")
a = tf.constant([1,2,3,4,5])
random = tf.random_normal([2,3],mean=0.0,stddev=1.0)
var = tf.Variable(initial_value=random,name=None,trainable=None)
print(a,var)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init) # 初始化op
print(sess.run([a,var])) # 再次打印 # ====================================================
# 可视化
# 模块:summary
with tf.Session() as sess:
sess.run(init)
filewriter = tf.summary.FileWriter(".",graph=sess.graph)
# 运行后生成文件,每次运行都会生成文件,
# tensorboard --logdir="生成的文件所在的目录" 会启动一个服务器,访问即可
# ===============================================
# 线性回归原理及实现
# 1,转备好特征和目标值
# 2,建立模型 模型参数必须是变量
# 3,求损失函数,误差 均方误差
# 4,梯度下降优化损失过程,指定学习率
# ========运算api
# tf.matmul(x,w) 矩阵运算
# tf.squqre(error) 平方 每个样本误差平方
# tf.reduce_mean(error) 每个列表平均值 # ===========梯度下降api
# tf.train.GradientDescentOptimizer(learning_rate)
# minimize
# 返回梯度下降op
# ==============================================
# tensorflow 实现简单的线性回归
import tensorflow as tf
def myregression():
"""
自实现一个线性回归预测
"""
# 1,准备数据, x 特征值[100,10] y目标值[100]
# 准备x
x = tf.random_normal([100,1],mean=1.75,stddev=0.5,name="x_data")
# 准备y,自定义出实际的w,b
# 矩阵相乘必须是二维的
y_true= tf.matmul(x,[[0.7]])+0.8
# 2,建立模型
# 随机的权重与偏置,让进行优化
# 只能使用变量定义,trainable控制该变量 训练的时候是否要变化
weight = tf.Variable(tf.random_normal([1,1],mean=0.0,stddev=0.75),trainable=True)
bias = tf.Variable(0.0,name="b")
y_predcit = tf.matmul(x,weight)+bias
# 3,建立损失函数,均方误差
loss = tf.reduce_mean(tf.square(y_true-y_predcit))
# 4,梯度下降优化损失
youhua = tf.train.GradientDescentOptimizer(0.1) # 一般0-1之间不能太大,
# 也可2,3,10等 若太大可能会出现nan:梯度爆炸
# 解决方案:重新设计网络,调整学习率,使用梯度截断,使用激活函数
train_op = youhua.minimize(loss)
# 收集tensor
tf.summary.scalar("losses",loss) # 在tensorborad中 scalars 会显示在学习的过程中loss的变化曲线
tf.summary.histogram("weights",weight)
# 定义合并tensor的op
merged=tf.summary.merge_all()
saver = tf.train.Saver() init = tf.global_variables_initializer()
# 会话运行
with tf.Session() as sess:
sess.run(init)
# 打印不优化的train_op
print(sess.run([weight,bias]))
filewrite = tf.summary.FileWriter(".",graph=sess.graph)
# 模型恢复
# 模型文件存在
# saver.restore("sess","路径") # 循环运行优化
for i in range(1000): sess.run(train_op)
# 运行合并的tensor
summary = sess.run(merged)
filewrite.add_summary(summary,i)
print("第{}次".format(i),sess.run([weight, bias]))
saver.save(sess,"./reserve/model")
if __name__ =="__main__":
myregression()
# ========================
# tensorflow变量作用域tf.variable_scope()创建指定名字的变量作用域
# 不同的部分放在不同的作用域下,tensorflowboard中graph 会更加清晰,作用分明
with tf.variable_scope("name"):
pass # 增加变量显示
# 添加权重参数,损失值等在tensorborad中显示
# 1,收集变量
# tf.summary.scalar(name="",tensir)收集对于损失函数和准确率等单值变量,name为变量值,tensor为值
# tf.summary.histogram(name="",tensor) 收集高维度的变量参数
# 2,合并变量写入事件文件
# merged = tf.summary.merge_all()
# 运行合并:summary=sess.run(merged) 每次迭代都需要运行
# 添加:FileWriter.add_summary(summary,i)i表示第几次迭代
# ========================
# tensorflow变量作用域tf.variable_scope()创建指定名字的变量作用域
# 不同的部分放在不同的作用域下,graph 会更加清晰,作用分明
with tf.variable_scope("name"):
pass
# 模型的保存与加载
saver = tf.train.Saver(var_list=None,max_to_keep=5)
# var_list:指定要保存和还原的变量,作为一个dict或列表传递
# max_to_keep:指示要保留的最近检查点文件的最大数量,创建新文件时,删除旧文件,保留最新的5个
# 文件格式:checkpoint文件
saver.save("sess对象","路径/文件名字")
# 第一次保存
# checkpoint:记录模型名字,文件路径
# name.data-00000-of-00001 数据存储文件
# name.index name.meta
# 模型的加载
# saver.restore(sess,"路径")
# 在with放入会话中,开始优化前
# ===================================
# 自定义命令行参数
# 1, 首先定义有哪些参数需要在运行时指定
# 2,程序当中获取定义的命令行参数
# 名字,默认值,说明
# 以前的版本
# tf.app.flags.DEFINE_integer("max_step",100,"模型训练的步数")
# tf.app.flags.FLAGS.max_step 获取数据
# 新版
flags = tf.flags.FLAGS # 定义对象
tf.flags.DEFINE_integer("max_step",100,"模型训练的步数")
tf.flags.DEFINE_string("file_path","","文件路径")
tf.flags._FlagValuesWrapper # 初始化
flags.max_step=100 # 修改 或获取
# 定义完成后 运行文件时 python xx.py --max-step=500 即可传入,字符串需要加引号
深度学习_1_Tensorflow_1的更多相关文章
- 【深度学习Deep Learning】资料大全
最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books by Yoshua Bengio, Ian Goodfellow and Aaron C ...
- DeepMind背后的人工智能:深度学习原理初探
去年11月,一篇名为<Playing Atari with Deep Reinforcement Learning>的文章被初创人工智能公司DeepMind的员工上传到了arXiv网站.两 ...
- 【转】TensorFlow练习20: 使用深度学习破解字符验证码
验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册.灌水.发垃圾广告等等 . 验证码的作用是验证用户是真人还是机器人:设计理念是对人友好,对机 ...
- 整理:深度学习 vs 机器学习 vs 模式识别
http://www.csdn.net/article/2015-03-24/2824301 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等) http://developer ...
- [深度学习大讲堂]从NNVM看2016年深度学习框架发展趋势
本文为微信公众号[深度学习大讲堂]特约稿,转载请注明出处 虚拟框架杀入 从发现问题到解决问题 半年前的这时候,暑假,我在SIAT MMLAB实习. 看着同事一会儿跑Torch,一会儿跑MXNet,一会 ...
- 手把手教你搭建深度学习平台——避坑安装theano+CUDA
python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用pytho ...
- 深度学习框架搭建之最新版Python及最新版numpy安装
这两天为了搭载深度学习的Python架构花了不少功夫,但是Theano对Python以及nunpy的版本都有限制,所以只能选用版本较新的python和nunpy以确保不过时.但是最新版Python和最 ...
- 机器学习&深度学习资料
机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1) 机器学习(Machine Learning)&深度学习(Deep Lea ...
- 【转载】如何自学深度学习技术,大神Yann LeCun亲授建议
编者按:Quora 上有网友提问:自学机器学习技术,你有哪些建议?(What are your recommendations for self-studying machine learning), ...
随机推荐
- linux扩展根目录空间
转自:http://blog.chinaunix.net/uid-363820-id-2181838.html Linux用户如何扩展磁盘空间? 这里以B型VPS为例,说明磁盘空间的具体扩展方法如下: ...
- js 基本类型与引用类型的存储
js的变量类型分为基本数据类型和引用数据类型 7种基本数据类型:null, undefined, number, boolean, string(大多数语言中string属于引用数据类型,而在js中它 ...
- Windows系统Python直接调用C++ DLL
环境:Window 10,VS 2019, Python 2.7.12, 64bit 1,打开 VS 2019,新建C++ Windows 动态链接库工程 Example,加入下列文件,如果Pytho ...
- 【VS开发】#pragma预处理命令
#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,"XXX.lib") ...
- prometheus 监控 redis + rabbitmq
1.安装部署 1.1 wget https://github.com/oliver006/redis_exporter/releases/download/v0.15.0/redis_exporter ...
- eNSP——配置通过FTP进行文件操作
原理: FTP (File Transfer Protocol,文件传输协议)是在TCP/IP网络和Internet.上最早使用的协议之-,在TCP/IP协议族中属于应用层协议,是文件传输的Inter ...
- 【leetcode算法-简单】1.两数之和
[题目描述] 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- LeetCode 第 165 场周赛
LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...
- (四)循环队列 VS 数组队列 (效率对比)
目录 背景 测试代码 结果 链表 随机访问 背景 各自完成插入 10万.20万 条随机数,然后再将这些随机数出队列 : 测试代码 /** * 测试速度 */ public String testSpe ...
- 剑指offer34:第一个只出现一次的字符的位置
1 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 2 思路和方法 ch[ ...