1. 机器学习 深度学习
算法 分类:神经网络(简单) 神经网络(深度)
回归 图像:卷积神经网络
自然语言处理:循环神经网络
2.深度学习框架
Internet,giant's,TensorFlow,software...
3.Tensorflow
.Google Brain计划产物
版本迭代快
特点:
1.真正的可移植性
2.多语言支持
3.高度的灵活性与效率
4.网站
https://tensorflow.google.cn/install
5.TensorFlow安装:
CPU:版本 pip install tensorflow
参考博客:https://blog.csdn.net/qq_36853469/article/details/103586579
GPU:参考其他
6.tensorflow图的结构
tensor:张量,即数据
operation(op):专门运算的操作节点,所有操作都是一个op
graph:图:整个程序的结构
Session():会话:运算程序
# -*- coding: UTF-8 -*-
'''
@Author :Jason
tensorflow版本为 1.14.0
版本2.0及以上
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
'''
# import tensorflow as tf
# print(tf.__version__)
# import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" #日志等级
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 这是默认的显示等级,显示所有信息
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示 warning 和 Error
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示 Error
#实现一个加法运算运算
a = tf.constant(1.0)
b = tf.constant(1.0)
sum1 = tf.add(a,b)
print(sum1) #Tensor("Add:0", shape=(), dtype=float32)
with tf.Session() as sess:
print(sess.run(sum1))#2.0
7.tensorflow日志级别
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 这是默认的显示等级,显示所有信息
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示 warning 和 Error
os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示 Error
8. 计算密集型 IO密集型
框架: tensorflow等 scrapy,web,
cpu计算 http请求,读取,
9.garph:图:定义计算
图默认已经注册,一组表示tf.Operation计算单位的对象和tf.Tensor表示操作 之间流动的数据单元的对象;
获取调用:
1.tf.get_default_graph()
2.op、sess或者tensorflow的graph属性
# -*- coding: utf-8 -*-
'''
@Author :Jason
图gragh:
包含了 op 和 tensor
'''
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" #日志等级
def graph1():
#实现一个加法运算运算
a = tf.constant(1.0)
b = tf.constant(1.0)
sum1 = tf.add(a,b)
#默认的这张图,相当于给程序分配一段内存
graph = tf.get_default_graph()
print("graph图:",graph)#graph图:
with tf.Session() as sess:
print(sess.run(sum1))#2.0
#上面程序的参数,运算都在该内存中(即这张图),所以值都一样
print(a.graph) #
print(sum1.graph) #
print(sess.graph) #
def graph2():
#创建一张图,上下文环境
g = tf.Graph()
print(g) #
with g.as_default():
c = tf.constant(110)
print(c.graph) #
def session1():
g = tf.Graph()
with g.as_default():
c = tf.constant(110)
print(c.graph)
a = tf.constant(1.0)
b = tf.constant(1.0)
sum1 = tf.add(a, b)
# 默认的这张图,相当于给程序分配一段内存
default = tf.get_default_graph()#获取默认的图
#只能运行一个图,可以指定图,参数 graph=
with tf.Session(graph=g,config=tf.ConfigProto(log_device_placement=True)) as sess:
# print(sess.run(c))#...is not an element of this graph
# 未指定g图报错原因,c不是默认图中的元素.默认的是default
print(sess.run(c)) #110
if __name__ == "__main__":
session1()
10.op:只要使用tensorflow的API定义的函数都是OP
11.tensor:张量,就指代的是数据
tensorflow依赖的是numpy
张量的阶和数据类型
Tensorflow基本的数据格式
一个类型化的N维数组(tf.Tensor)
三部分:名字(op类型),形状(几阶,即几维),数据类型
形状:tensorflow:打印出来的形状表示
0维:() 1维:(5) 2维:(3,6) 3维:(2,3,5)
张量的属性
graph 张量所属的默认图
op 张量的操作名
name 张量的字符串描述
shape 张量的形状
张量的动态形状与静态形状:在于有没有生成一个新的张量数据
Tensorflow中,张量具有静态形状和动态形状
静态形状:
创建一个张量,初始状态的形状
tf.Tensor.get_shape():获取静态形状
tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推断的情况下。
动态形状:
一种描述原始张量在执行过程中的一种形状(动态变化)
tf.reshape:创建一个具有不同动态形状的新张量。
对比:numpy中的reshape转置是改变本身
要点:
1,转换静态形状的时候,1-D到1-D,2-D到2—D,不能跨阶数改变形状
2,对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状
3,tf.reshape()动态创建新张量时,元素个数不能不匹配
# -*- coding: utf-8 -*-
'''
@Author :Jason
张量:张量的属性
静态形状 和 动态形状
'''
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
a = tf.constant(1.0)
b = tf.constant(2.0)
plt = tf.placeholder(tf.float32,[None,100])
#张量的属性
# with tf.Session() as sess:
# print(a.graph)
# print("=================")
# print(a.shape)
# print(plt.shape)
# print("=================")
# print(a.name)
# print("=================")
# print(a.op)
# '''
#
# =================
# ()
# (?, 100)
# =================
# Const:0
# =================
# name: "Const"
# op: "Const"
# attr {
# key: "dtype"
# value {
# type: DT_FLOAT
# }
# }
# attr {
# key: "value"
# value {
# tensor {
# dtype: DT_FLOAT
# tensor_shape {
# }
# float_val: 1.0
# }
# }
# }
#
# '''
#
plt = tf.placeholder(tf.float32,[None,100])
print(plt) #Tensor("Placeholder_1:0", shape=(?, 100), dtype=float32)
plt.set_shape([75,100]) #某个固定的维度是不能再变的
print(plt) #Tensor("Placeholder_1:0", shape=(75, 100), dtype=float32)
#对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状
# plt.set_shape([100,100]) #ValueError: Dimension 0 in both shapes must be equal, but are 75 and 100. Shapes are [75,100] and [100,100].
#但是动态形状可以去创建一个新的张量,注意元素数量要相等,不能变
plt_reshape = tf.reshape(plt,[100,75])
print(plt_reshape) #Tensor("Reshape:0", shape=(100, 75), dtype=float32)
with tf.Session() as sess:
pass
张量操作-生成张量
除了上面的,还有
tf.truncated_normal(shape,mena=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
从截断的正态分布中输出随机值,所有的数字都不超过两个标准差
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float,seed=None,name=None)
从正态分布中输出随机值,由随机正态分布的数字组成的矩阵。
张量变换
12.Session:会话:执行计算。一次只能运行一张图,可以在会话当中指定图去运行,不指定默认
with tf.Seeeion(graph="指定图") as sess:
作用:
1.运行图的结构
2.分配资源计算
3.掌握资源(变量的资源,队列,线程)
调用:
1.sess = tf.Session(), sess.run(),sess.close()
2.上下文管理器:with tf.Session() as sess:
sess.run()#程序结束自动关闭会话
参数:
graph:指定graph
config=tf.ConfigProto(log_device_placement=True):在某个设备(CPU等)运行
交互式:tf.InteractiveSession()
只要有上下文交互环境,之前的sum就可以由
sess.run(sum1)改为sum.eval()
13.会话的run()方法:运行ops 和 计算张量
run(fetches,feed_dict=None,graph=None)
.嵌套列表,元组
namedtuple,dict或者OrderedDict(重载的运算符也能运算)
.feed_dict
允许调用者覆盖图中指定张量的值,提供给placeholder使用
.返回值异常
RuntimeError:如果Session出于无效转态(例如已关闭)
TypeError:如果fetcher或者feed_dict 键是不合适的类型
ValueError:键无效 或 引用Tensor不存在
# -*- coding: UTF-8 -*-
'''
@Author :Jason
Session的run()方法
'''
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
a = tf.constant(1.0)
b = tf.constant(2.0)
sum1 = tf.add(a,b)
c = 1
d = 2
sum2 = c + d
#训练模型
#实时的提供数据去训练
#placeholder 是一个占位符,feed_dict一个字典
plt = tf.placeholder(tf.float32,[3,2])#3行2列,若不知道行列,用None替换,例如 [None,2], 行可以任意
print(plt) #Tensor("Placeholder:0", shape=(3, 2), dtype=float32)
with tf.Session() as sess:
# print(sess.run([a,b,sum1])) #1.0, 2.0, 3.0]
# 不是op不能运行
# print(sess.run(sum2)) #报错TypeError: Fetch argument 3 has invalid type , must be a string or Tensor. (Can not convert a int into a Tensor or Operation.)
# #有重载的机制,默认会将运算符重载成op类型
# sum3 = a + c
# print(sess.run(sum3)) #2.0
print(sess.run(plt,feed_dict = {plt:[[1,2],[3,4],[5,6]]}))
'''
[[1. 2.]
[3. 4.]
[5. 6.]]
'''
15.变量
变量也是一种op,是一种特殊的张量,能够进行存储持久化,它的值就是张量,默认被训练。
变量的创建
tf.Variable(initial_value=None,name=None,trainable=True)
创建一个带值initial_value的新变量
assign(value)-----为变量分配一个新值,返回新值
eval(session=None)------计算并返回此变量的值
name属性表示变量的名字
变量的初始化
tf.global_variables_initializer()
添加一个初始化所有变量的op,在会话中开启。
# -*- coding: utf-8 -*-
'''
@Author :Jason
变量
1、变量op持久化保存,普通张量op不行
2.当定义一个变量op的时候,一定要在会话当中去运行初始化
'''
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
#变量
a = tf.constant([1,2,3,4,5])
var = tf.Variable(tf.random_normal([2,3],mean=0.0,stddev=1.0))
# print(a,var) #Tensor("Const:0", shape=(5,), dtype=int32)
#必须做显示初始化
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
#必须运行初始化op
sess.run(init_op)
print(sess.run([a,var]))
#未显示初始化的话...uninitialized ...未定义
#[array([1, 2, 3, 4, 5]), array([[-0.5577389, -1.0026547, -2.323526],
# [-0.80823505, -0.20104903, 0.7990945]], dtype=float32)]
16.可视化学习Tensorboard:增加变量显示
数据序列化-events文件
Tensorboard通过读取TensorFlow的事件文件来运行
tf.summary.FileWriter("/tmp/tensorflow/summary/test/",graph=)
返回filerwriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用
开启
tensorboard --logdir="/tmp/tensorflow/summary/test/"
一般浏览器打开为127.0.0.1:6006
注:修改程序后,在保存一遍会有新的事件文件,打开默认最新
# -*- coding: utf-8 -*-
'''
@Author :Jason
变量
1、变量op持久化保存,普通张量op不行
2.当定义一个变量op的时候,一定要在会话当中去运行初始化
3.name参数:在tensorboard使用的时候显示名字,可以让相同op名字进行区分
'''
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
#变量
a = tf.constant([1,2,3,4,5])
b = tf.constant(1.0)
c = tf.constant(2.0)
d = tf.constant(3.0)
sum = tf.add(b,c,name="bc")
sum1= tf.add(b,d,name="bd")
var = tf.Variable(tf.random_normal([2,3],mean=0.0,stddev=1.0))
# print(a,var) #Tensor("Const:0", shape=(5,), dtype=int32)
#必须做显示初始化
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
#必须运行初始化op
sess.run(init_op)
#把程序的图结构写入事件文件,graph把指定的图写进时间文件当中
filewtiter = tf.summary.FileWriter("./tmp/summary/test/",graph=sess.graph)
print(sess.run([sum,sum1,var]))
#未显示初始化的话...uninitialized ...未定义
#[array([1, 2, 3, 4, 5]), array([[-0.5577389, -1.0026547, -2.323526],
# [-0.80823505, -0.20104903, 0.7990945]], dtype=float32)]
访问localhost:6006查看相应的图,op等可视化信息