tensorflow知识点小总结2

本文介绍了TensorFlow中梯度更新的不同方法,包括一次性更新和分步骤更新的方式;探讨了GPU资源的有效管理和分配策略;解析了tf.Graph()的使用场景;区分了tf.shape(a)与a.get_shape()的功能与适用场合;并指出了使用glob模块时需注意的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 梯度更新
正常的梯度更新:

optm = tf.train.AdamOptimizer(learning_rate).minimize(loss)
实际 上 tf.train.AdamOptimizer 进行了两部运算,第一步计算梯度,第二步更新梯度。另一种更新方式就是先计算梯度,再更新我们需要更新的变量。如下,第一种方式,一步计算:
t_vars = tf.trainable_variables() #获取所有变量名
G_vars=[var for var in t_vars if 'generator' in var.name] #获取需要的变量名
g_optm = tf.train.AdamOptimizer(learning_rate=0.00001).minimize(g_loss,var_list=G_vars)
第二种方式,分步计算:
t_vars = tf.trainable_variables()
G_vars=[var for var in t_vars if 'generator' in var.name]
gradient_all =tf.train.GradientDescentOptimizer(0.01).compute_gradients(loss,var_list=G_vars) #对应变量名的梯度计算,这是第一步
optm = tf.train.GradientDescentOptimizer(0.01).apply_gradients(gradient_all) #更新计算出来的梯度,这是第二步
另外,还有两个函数,不常用到,了解一下即可:
tf.gradients(ys, xs, grad_ys=None, name=’gradients’, colocate_gradients_with_ops=False, gate_gradients=False, aggregation_method=None)
该函数计算ys在xs方向上的梯度,需要注意与train.compute_gradients所不同的地方是,该函数返回一组dydx的列表,而不是梯度-权值对
tf.stop_gradient(input, name=None)
该函数告知整个graph图中,对input不进行梯度计算,将其伪装成一个constant常量


2 GPU内存的使用
在tensorflow代码中 

with tf.device('/gpu:0'):

可以使用这一条代码指定某段程序在某一个GPU上运算,但仍然会默认占用所有GPU资源。不过不和其他人公用GPU时也不会有影响,下面介绍两种限定GPU占用的方法:

(1)在tensorflow中定义session时作如下设置,该设置会启用最少的GPU显存来运行程序

config = tf.ConfigProto() 
config.gpu_options.allow_growth = True 
session = tf.Session(config=config) 
(2)在tensorflow中定义session时作如下设置,该设置会强制程序只占用指定比例的GPU显存

config = tf.ConfigProto() 
config.gpu_options.per_process_gpu_memory_fraction = 0.4 # 占用GPU40%的显存 
session = tf.Session(config=config)

3 tf.Graph()
这里主要引用 谢小小xh 的博客内容,博客地址: http://blog.youkuaiyun.com/xierhacker/article/details/53860379

4 tf.shape(a) 和 a.get_shape() 的区别
相同点:都可以得到tensor a的尺寸
不同点:tf.shape(a)中a 数据的类型可以是tensor, list, array 
                a.get_shape()中a的数据类型只能是tensor,且返回的是一个元组(tuple)
另外,a.get_shape() 得到的tuple可以利用 a.get_shape().as_list  转成列表,从而对维度进行调用. 


5 glob注意事项
from glob import glob
在linux下glob得到的列表是乱序的,需要用sort重新排序。windows下glob的到的列表顺序和文件夹显示的顺序一致。由于这一错误导致我在Linux下训练的模型在windows下测试,准确率为0的bug,困惑了很久,这里特别提出。


<think>好的,我需要帮助用户了解TensorFlow的基本知识点。首先,根据用户提供的引用资料,我需要整理出核心概念和入门知识。 用户提到了引用[1],里面提到TensorFlow是深度学习的重要框架,所以应该从基本概念开始。比如计算图、张量这些基础元素,对吧?引用[3]也提到了层(layer)作为基本运算单元,特别是Dense层,这可能属于模型构建部分。 接下来,用户可能想了解工作流程。引用[1]提到工作流程和使用方法,应该包括数据准备、模型构建、训练、评估这几个步骤。需要分步骤解释每个环节的作用,比如数据预处理的重要性,模型构建时层的堆叠,编译模型时的损失函数和优化器选择,以及训练循环的概念。 然后,用户可能需要一些简单的代码示例来辅助理解。比如构建一个线性回归模型,使用Dense层,用均方误差作为损失函数,选择随机梯度下降作为优化器。这里要注意代码的正确性,比如使用Sequential模型,添加层,编译模型,然后训练。根据引用[3]和引用[5],优化器的作用是更新参数,所以需要提到优化器的选择。 另外,用户提供的引用中有提到TensorFlow的发展,比如TF 2.0的改进,如Eager Execution和Keras集成,这些属于新特性,应该作为优势部分介绍。还有TF Lite和TF.js的应用场景,可以放在应用扩展里说明。 用户的问题还可能涉及如何入门,所以需要给出学习建议,比如从官方文档和实际项目开始。同时,根据引用[4],TensorFlow Lite推荐使用签名方法,但作为入门可能暂时不需要深入,可以简单提及。 现在需要检查是否有遗漏的点。例如,计算图在TF2中的变化,动态计算图和静态图的区别,可能对用户理解执行模式有帮助。还要确保所有的术语都有解释,比如张量是多维数组,计算图是数据流图等。 最后,生成相关问题时要围绕基本概念、工作流程、新特性、应用场景和学习资源,确保问题覆盖用户可能感兴趣的方面。比如优化器的作用,张量的概念,TF Lite的用途等。 总结一下,回答结构应该是:核心概念、工作流程、代码示例、新特性、应用扩展和学习建议,然后附上相关问题。需要确保每个部分都引用正确的资料,例如引用[3]提到层,引用[5]提到优化器等。</think>### TensorFlow基本概念和入门知识 #### 一、核心概念 1. **张量(Tensor)** TensorFlow 的核心数据单位是**张量**,即多维数组。例如: - 标量:零维张量(如 $5$) - 向量:一维张量(如 $[1,2,3]$) - 矩阵:二维张量(如 $\begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}$) 2. **计算图(Computational Graph)** TensorFlow 1.x 使用静态计算图定义模型,而 TensorFlow 2.x 默认启用**动态计算图**(Eager Execution),支持即时运算和调试[^2]。 3. **层(Layer)** 层是模型的基本构建单元。例如,`Dense` 层(全连接层)实现线性变换:$$y = \sigma(Wx + b)$$ 其中 $W$ 是权重矩阵,$b$ 是偏置向量,$\sigma$ 是激活函数[^3]。 --- #### 二、工作流程 1. **数据准备** - 数据加载(如 `tf.data.Dataset`) - 预处理(归一化、标准化等) 2. **模型构建** ```python model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu'), # 全连接层 tf.keras.layers.Dense(10, activation='softmax') # 输出层 ]) ``` 3. **模型编译** ```python model.compile( optimizer='sgd', # 优化器(如随机梯度下降)[^5] loss='mse', # 损失函数(如均方误差) metrics=['accuracy'] # 评估指标 ) ``` 4. **训练与评估** ```python model.fit(X_train, y_train, epochs=10) # 训练 model.evaluate(X_test, y_test) # 评估 ``` --- #### 三、新特性与优势(TensorFlow 2.x) 1. **动态计算图**:直接执行操作,无需预先定义静态图[^2]。 2. **Keras 集成**:高阶API简化模型构建。 3. **扩展工具**: - **TensorFlow Lite**:部署模型到移动设备[^4]。 - **TensorFlow.js**:在浏览器中运行模型。 --- #### 四、应用场景 - **图像分类**:使用卷积神经网络(CNN)。 - **自然语言处理**:循环神经网络(RNN)或Transformer。 - **端侧部署**:通过 TensorFlow Lite 在手机或嵌入式设备运行模型[^4]。 --- #### 五、学习建议 1. 从官方文档和教程入门(如[TensorFlow官网](https://www.tensorflow.org/))。 2. 实践项目:从线性回归、MNIST手写数字识别开始。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值