目录

1 核心概念

2 代码流程

3 基础代码:

3.1 tf的版本 定义常量 理解tensor 了解session

3. 2   指定设备、  Variable 初始化 、  with块创建session可以不用close()、x.initializer.run()初始化方式、eval()执行方式

3.3 全局变量初始化

3.4 interactivesSession

3.5 理解Graph的概念 查看默认的Graph,指定自定义变量在那个Graph中

3.6 variable的生命周期 :从init开始到session.close()结束

4.  线性回归采用tensorflow 求解析解

5  线性回归采用tensorflow  批量梯度下降求解


1 核心概念

 TensorFlow中的计算可以表示为一个有向图(Directed Graph)
 或者称计算图(Computation Graph)
 其中每一个运算操作(operation)将作为一个节点(node)
 计算图描述了数据的计算流程,也负责维护和更新状态
 用户通过python,c++,go,Java语言设计这个这个数据计算的有向图
 计算图中每一个节点可以有任意多个输入和任意多个输出
 每一个节点描述了一种运算操作,节点可以算是运算操作的实例化(instance)
 计算图中的边里面流动(flow)的数据被称为张量(tensor),故得名TensorFlow

2 代码流程

 Import tensorflow as tf
 b = tf.Variable(tf.zeros([100]))
 W = tf.Variable(tf.random_uniform([784,100], -1, 1))
 x = tf.placeholder(name=“x”)
 relu = tf.nn.relu(tf.matmul(W, x) + b)
 Cost = […]
 Sess = tf.Session()
 for step in range(0, 10):
 input = …construct 100-D input array…
 result = sess.run(cost, feed_dict={x: input})
 print(step, result)

3 基础代码:

3.1 tf的版本 定义常量 理解tensor 了解session

import tensorflow as tf
print(tf.__version__)
a=tf.constant(10)
b=a+10    #1.6.0
print(b)  #Tensor("add:0", shape=(), dtype=int32) 打印出b是一个tensor
sess=tf.Session()
result=sess.run(b)
print(result)  #20

3. 2   指定设备、  Variable 初始化 、

with块创建session可以不用close()、

x.initializer.run()初始化方式、

eval()执行方式

import tensorflow as tf
with tf.device('/cpu:0'): #说明点1 TensorFlow程序可以通过tf.device函数来指定运行每一个操作的设备。x=tf.Variable(3,name='x')
y=tf.Variable(4,name='y')
f=x*x*y+y+2
# sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))
# sess.run(x.initializer)  #说明点2 因为X是Variable 所以必须要初始化
# sess.run(y.initializer)
# result=sess.run(f)
# print(result)
# sess.close()# 以上注释代码的另一种书写方式
with tf.Session() as sess:x.initializer.run()y.initializer.run()result=f.eval()
print(result)# tf.Variable生成的变量,每次迭代都会变化,
# 这个变量也就是我们要去计算的结果,所以说你要计算什么,你是不是就把什么定义为Variable
'''
TensorFlow程序可以通过tf.device函数来指定运行每一个操作的设备。 这个设备可以是本地的CPU或者GPU,也可以是某一台远程的服务器。
TensorFlow会给每一个可用的设备一个名称,tf.device函数可以通过设备的名称,来指定执行运算的设备。比如CPU在TensorFlow中的名称为/cpu:0。 在默认情况下,即使机器有多个CPU,TensorFlow也不会区分它们,所有的CPU都使用/cpu:0作为名称。 –而一台机器上不同GPU的名称是不同的,第n个GPU在TensorFlow中的名称为/gpu:n。
–比如第一个GPU的名称为/gpu:0,第二个GPU名称为/gpu:1,以此类推。
–TensorFlow提供了一个快捷的方式,来查看运行每一个运算的设备。
–在生成会话时,可以通过设置log_device_placement参数来打印运行每一个运算的设备。 –除了可以看到最后的计算结果之外,还可以看到类似“add: /job:localhost/replica:0/task:0/cpu:0”这样的输出
–这些输出显示了执行每一个运算的设备。比如加法操作add是通过CPU来运行的,因为它的设备名称中包含了/cpu:0。
–在配置好GPU环境的TensorFlow中,如果操作没有明确地指定运行设备,那么TensorFlow会优先选择GPU
'''

3.3 全局变量初始化

import tensorflow as tf
x=tf.Variable(3,name='x')
y=tf.Variable(4,name='y')
f=x*x*y+y+2# 可以不用分别对每个变量去进行初始化
# 并不立即初始化,在run运行的时候才初始化# 方式一
init=tf.global_variables_initializer()
with tf.Session() as sess:# sess.run(tf.global_variables_initializer())init.run()result=f.eval()
print(result)# 方式二
# with tf.Session() as sess:
#     sess.run(tf.global_variables_initializer())
#     result=f.eval()
# print(result)

3.4 interactivesSession

采用此种方式创建session  则认为自己是默认的session

默认的seesion有什莫用?

tensorflow除了具有session的概念还有图graph的概念。

一般我们需要指定那个session去运行那个图,注意:一个图可以被多个session使用。

默认的session 一般会执行默认的图。

import tensorflow as tfx = tf.Variable(3, name='x')
y = tf.Variable(4, name='y')
f = x*x*y + y + 2init = tf.global_variables_initializer()# InteractiveSession和常规的Session不同在于,自动默认设置它自己为默认的session
# 即无需放在with块中了,但是这样需要自己来close session
sess = tf.InteractiveSession()
init.run()
result = f.eval()
print(result)
sess.close()# TensorFlow程序会典型的分为两部分,第一部分是创建计算图,叫做构建阶段,
# 这一阶段通常建立表示机器学习模型的的计算图,和需要去训练模型的计算图,
# 第二部分是执行阶段,执行阶段通常运行Loop循环重复训练步骤,每一步训练小批量数据,
# 逐渐的改进模型参数

3.5 理解Graph的概念 查看默认的Graph,指定自定义变量在那个Graph中

import tensorflow as tf
# 任何创建的节点会默认自动加入到默认的图中
x1=tf.Variable(1)
print(x1.graph is tf.get_default_graph())# 大多数情况下 上面运行的很好。有时候想要管理=多个图
# 可以创建一个新的图 并且临时使用with块  使得它成为默认的图
graph=tf.Graph()
x3=tf.Variable(3)
with graph.as_default():x2=tf.Variable(2)
x4=tf.Variable(3)
print(x2.graph is graph)
print(x2.graph is tf.get_default_graph())
print(x3.graph is tf.get_default_graph())
print(x4.graph is tf.get_default_graph())"""
True
True
False
True
True"""

3.6 variable的生命周期 :从init开始到session.close()结束

import tensorflow as tf
# 当去计算一个节点的时候  tensorflow 自动计算它依赖的一组节点,并且首先计算依赖的节点
w=tf.Variable(3)
# w=tf.Constant(3)
x=w+2
y=x+5
z=x*3with tf.Session()as sess:sess.run(w.initializer)print(sess.run(y))# 这里为了计算z  又重新计算了x和w 处理Variable的值 tf是不会缓存Constant等的值的# 一个Variable的生命周期是总inintializer开始 到会话session.close() 结束print(sess.run(z))# 如果我们想要有效的计算y和z 并且又不重复计算w和x两次 我们必须要求TensorFlow 计算y和z在一个图里面
with tf.Session() as sess:sess.run(w.initializer)y_val,z_val=sess.run([y,z])print(y_val)"""
10
15
10
"""

4.  线性回归采用tensorflow 求解析解

import tensorflow as tf
import numpy as np
from sklearn.datasets import  fetch_california_housing
# 立即下载数据集
housing=fetch_california_housing(data_home="./",download_if_missing=True)
# 获取x数据行数和列数
m,n=housing.data.shape
# print(m,n) #20640 8
# print(housing.data,housing.target)
# print(housing.feature_names)
# # 这里添加一个额外的bias输入特征(x0=1)到所有的训练数据上面,因为使用的numpy所以会立即执行
housing_data_plus_bias=np.c_[np.ones((m,1)),housing.data]
#创建两个TesnsorFlow 常量节点x和y 去持有数据和标签
X=tf.constant(housing_data_plus_bias,dtype=tf.float32,name='X')
y=tf.constant(housing.target.reshape(-1,1),dtype=tf.float32,name='y') #target 转为为一个列向量  指明tf.float32的好处 如果不是浮点数会将其转化为浮点数
# 使用tensorflow框架提供的矩阵操作去求theta
XT=tf.transpose(X)
#解析解 一步计算最优解
theta=tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(XT,X)),XT),y)
print(theta)
with tf.Session() as sess:theta_value=theta.eval() #sess.run(theta)print(theta_value)"""
Tensor("MatMul_2:0", shape=(9, 1), dtype=float32)
2022-01-14 22:31:05.140332: I C:\tf_jenkins\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[-3.7185181e+01][ 4.3633747e-01][ 9.3952334e-03][-1.0711310e-01][ 6.4479220e-01][-4.0338000e-06][-3.7813708e-03][-4.2348403e-01][-4.3721911e-01]]"""

5  线性回归采用tensorflow  批量梯度下降求解

import tensorflow as tf
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler
n_epochs=100000  #轮次
learning_rate=0.001 #学习率
# 立即下载数据集
housing=fetch_california_housing(data_home="./",download_if_missing=True)
# 获取x数据行数和列数
m,n=housing.data.shape
# print(m,n) #20640 8
# # 这里添加一个额外的bias输入特征(x0=1)到所有的训练数据上面,因为使用的numpy所以会立即执行
housing_data_plus_bias=np.c_[np.ones((m,1)),housing.data]
# 归一化
scaler=StandardScaler().fit(housing_data_plus_bias)
scaled_housing_data_plus_bias=scaler.transform(housing_data_plus_bias)
# print(scaled_housing_data_plus_bias)#创建两个TesnsorFlow 常量节点x和y 去持有数据和标签
X=tf.constant(scaled_housing_data_plus_bias,dtype=tf.float32,name='X') ##20640 n+1=9
y=tf.constant(housing.target.reshape(-1,1),dtype=tf.float32,name='y')
#random_uniform函数创建图里一个节点包含随机数值,给定他的形状和取值范围,就像numpy里的rand()函数
theta=tf.Variable(tf.random_uniform([n+1,1],-1.0,1.0),name='theta')  # 初始化theta  9 1
y_pred=tf.matmul(X,theta,name="predictions")   #y的预测值20640 1
error=y_pred-y   ##20640 1
# mse=tf.reduce_mean(tf.square(error),name='mse')  #先平方 在+和 求平均
mse=tf.sqrt(tf.reduce_mean(tf.square(error),name='rmse')) #先平方 在+和 求平均# 梯度的公式 (y_pred-y)*xj
gradients=2/m*tf.matmul(tf.transpose(X),error)   ## 9  20640  20640 1
# 赋值函数对于BGD来说就是 theta_new=theta-(learn_rate*gradients)
training_op=tf.assign(theta,theta-learning_rate*gradients)
init=tf.global_variables_initializer()
with tf.Session()as sess:sess.run(init)for epoch in range(n_epochs):if epoch%100 ==0:print("Epoch",epoch,"MSE=",mse.eval())  #打印出轮次  打印查看rmse是否在减小sess.run([training_op])                     #  本质是 迭代thetabest_theta=theta.eval()print(best_theta)
Epoch 99700 MSE= 2.1916323
Epoch 99800 MSE= 2.1916323
Epoch 99900 MSE= 2.1916323
[[-0.12582278][ 0.8297594 ][ 0.1187802 ][-0.2657673 ][ 0.30589166][-0.00449488][-0.03933227][-0.8995554 ][-0.87022537]]

机器学习算法 09-02 TensorFlow核心概念 TensorFlow基础代码、TensorFlow线性回归解析解和BGD求法相关推荐

  1. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

  2. python决策树 value_机器学习 | 算法笔记(四)- 决策树算法以及代码实现

    概述 上一篇讲述了<机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现>,本篇讲述机器学习算法决策树,内容包括模型介绍及代码实现. 决策树 决策树(Decision Tree)在机 ...

  3. RabbitMQ核心概念及基础API应用

    RabbitMQ核心概念及基础API应用 1 主流中间件介绍 衡量消息中间件的指标:服务性能,数据存储,集群架构. 1.ActiveMQ:Apache,支持JMS规范最完整的. 2.RocketMQ ...

  4. 10 种机器学习算法的要点(附 Python 和 R 代码)

    前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明.更个性化的技术. 也许我们生活在人类历史上最关键的时期:从使用大 ...

  5. 机器学习算法的要点(附 Python 和 R 代码)

    前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明.更个性化的技术. 也许我们生活在人类历史上最关键的时期:从使用大 ...

  6. 15分钟掌握Elasticsearch 8大核心概念与基础用法

    Elastic已经形成了一个较为庞大的生态,这个生态的核心就是Elasticsearch.初学者的重点就是如何快速地了解并使用Elasticsearch,本文总结了Elasticsearch的8大核心 ...

  7. 聊聊 Pulsar: Pulsar 的核心概念与基础架构

    一.Pulsar 介绍 Apache Pulsar 是 Apache 软件基金会的顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户 ...

  8. 深度解析开源推荐算法框架EasyRec的核心概念和优势

    简介:如何通过机器学习PAI实现快速构建推荐模型 作者:程孟力 - 机器学习PAI团队 随着移动app的普及,个性化推荐和广告成为很多app不可或缺的一部分.他们在改善用户体验和提升app的收益方面带 ...

  9. Hudi学习02 -- Hudi核心概念

    文章目录 基本概念 时间轴(Timeline) 文件布局(File Layout) 索引(Index) 索引原理 索引类型 索引的选择策略 表类型(Table Types) 查询类型(Query Ty ...

最新文章

  1. Oracle创建自增id,sql直接创建
  2. 机器人动力学简化模型(Euler-Lagrange equation)
  3. TF之LSTM:利用多层LSTM算法对MNIST手写数字识别数据集进行多分类
  4. java rgb转yuv_【转】总结各种RGB转YUV的转换公式
  5. 【软件工程】用例间的关系
  6. Web MIDI API W3C
  7. android获取详细地址,Android获取当前子网掩码地址(亲测可用)
  8. 人工智能丰收时代,传统营销企业如何应对?
  9. 洛谷——P1424 小鱼的航程(改进版)
  10. Java第四次作业,面向对象高级特性(继承和多态)
  11. 【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】
  12. ccy测试影响因子版270ms
  13. 电子信息工程考研专业c语言,电子信息专业考研专硕考什么
  14. 小米手机计算机usb连接,小米手机连接电脑不显示usb选项
  15. 思科设备密码破解方法
  16. P1106 删数问题【贪心】
  17. 《老梁四大名著情商课》笔记- 刚上班,别做林黛玉,也别做孙悟空
  18. Python是强语言类型还是弱语言类型
  19. 上海三菱电梯LEHY,LEGY,上海三菱,758 .778详 细地址码,总共100多页
  20. 腾讯云免流搭建教程免流服务…

热门文章

  1. “远香烟·近健康”乡风文明之禁烟活动
  2. 前端项目发版后用户需要手动刷新页面获取的解决方案
  3. c++中引用作为函数参数
  4. Flutter 图片选取 image_picker
  5. vibran_drv.sys 无法兼容win11
  6. UE《空山新雨后》总结笔记
  7. 011 MySQL性能分析
  8. 外屏和宽屏浪费了?HarmonyOS折叠屏设计规范教你用起来
  9. Kafka Sql:简单使用
  10. 软件工程实验:原型设计