83、使用1周期调度重新训练你的模型,看看是否能提高训练速度和模型准确率。
实现1周期调度并不困难,只需创建一个自定义回调函数,在每次迭代时修改学习率(可通过更改 self.model.optimizer.lr 来更新优化器的学习率)。
84、如何用一句话描述TensorFlow?它的主要特点有哪些?请列举其他流行的深度学习库。
TensorFlow简介
TensorFlow 是一个用于数值计算的 开源库 ,特别适合 大规模机器学习 。
主要特点
- 核心与 NumPy 相似,但支持 GPU
- 支持分布式计算
- 具有计算图分析和优化能力(图格式可移植)
- 提供基于反向自动微分的优化 API
- 拥有强大的 API,如:
-
tf.keras -
tf.data
其他流行的深度学习库
- PyTorch
- MXNet
- Microsoft Cognitive Toolkit
- Theano
- Caffe2
- Chainer
85、TensorFlow 能直接替代 NumPy 吗?两者的主要区别是什么?
TensorFlow 不能直接替代 NumPy,主要区别有:
- 函数名称不总是相同 ,如
tf.reduce_sum()和np.sum()。 - 部分函数行为不完全一样 ,如
tf.transpose()创建张量的转置副本,而 NumPy 的T属性创建转置视图,不实际复制数据。 - NumPy 数组是可变的 ,而 TensorFlow 张量不可变,但可使用
tf.Variable创建可变对象。
86、除了常规张量外,你能说出 TensorFlow 中另外六种数据结构吗?
可以,这六种数据结构分别是字符串、不规则张量、稀疏张量、张量数组、集合和队列。
87、自定义损失函数可以通过编写函数或继承 keras.losses.Loss 类来定义。什么时候使用哪种方法呢?
如果自定义损失函数不需要支持超参数或其他状态,一般可以将其实现为常规的 Python 函数。
如果自定义损失函数需要支持超参数或其他状态,则应继承 keras.losses.Loss 类并实现 __init__() 和 call() 方法。
若希望损失函数的超参数与模型一起保存,还必须实现 get_config() 方法。
88、同样,自定义指标可以用函数或 keras.metrics.Metric 的子类来定义。何时应使用这两种方式呢?
若自定义指标无需支持超参数或其他状态,可将其定义为普通 Python 函数;若要支持超参数或其他状态,或者计算整个 epoch 的指标不等同于计算该 epoch 所有批次的平均指标(如精确率和召回率指标),则应使用 keras.metrics.Metric 的子类,并实现 __init__() 、 update_state() 和 result() 方法来跟踪每个 epoch 的运行指标,还需实现 reset_states() 方法(除非只需将所有变量重置为 0.0)。若要将状态与模型一起保存,还应实现 get_config() 方法。
89、什么时候应该创建自定义层,而什么时候应该创建自定义模型?
通常,模型的内部组件(即层或可复用的层块)应创建为自定义层,需继承 Layer 类;而要训练的对象应创建为自定义模型,需继承 Model 类。
90、哪些用例需要编写自定义训练循环?
-
当
fit()方法不够灵活时,如《Wide & Deep》论文使用两个不同的优化器,一个用于宽路径,另一个用于深路径,而fit()方法只使用一个优化器,此时需要编写自定义循环。 -
为了更确信训练循环能精确执行预期操作,对
fit()方法的某些细节不确定时,也可编写自定义训练循环。
91、自定义Keras组件可以包含任意Python代码,还是必须能转换为TF函数?
自定义Keras组件应该能转换为TF函数,即应尽可能使用TF操作并遵守“TF函数规则”中的所有规则。但如果确实需要在自定义组件中包含任意Python代码,可以将其包装在 tf.py_function() 操作中(会降低性能并限制模型的可移植性),或者在创建自定义层或模型时设置 dynamic=True ,或在调用模型的 compile() 方法时设置 run_eagerly=True 。
92、如果想将一个函数转换为 TF 函数,需要遵守哪些主要规则?
- 若函数有副作用(如打印内容、更新 Python 计数器),副作用仅在函数被追踪时发生;
- 可将任意 Python 代码包装在
tf.py_function()操作中,但会影响性能和可移植性; - 可调用其他 Python 函数或 TF 函数,它们也需遵循相同规则;
- 若函数创建 TensorFlow 变量或有状态对象,必须在首次调用时创建,通常最好在 TF 函数外创建变量,赋值时使用
assign()方法; - 函数的 Python 源代码要对 TensorFlow 可用;
- 仅捕获对张量或数据集进行迭代的 for 循环,使用
for i in tf.range(x)而非for i in range(x)

最低0.47元/天 解锁文章
1054

被折叠的 条评论
为什么被折叠?



