日期:2020.04.10-2020.04
Ref: <tensorflow工程化项目实战>
章节:chapter6
tf代码分析
P137 line20 tf.train.get_or_create_global_step()
解释:这个函数主要用于返回或者创建(如果有必要的话)一个全局步数的tensor。参数只有一个,就是图,如果没有指定那么就是默认的图。和实例14不同的是,实例14是通过初始化一个全局步数变量让它在优化器中逐步递增其作用的,可见下面第二个参考。
链接: tf.train.get_or_create_global_step().
global_step .
P137 line31 tfe.implicit_gradients(getcost)
解释:动态图优化需要借助 tfe.implicit_gradients()函数。
P141 line15 with tf.GradientTape() as tape
解释:tf2.x中推荐的用于计算梯度的函数,并可对梯度做更精细化的控制。
链接:tf.GradientTape().
P143 line17 tfe.EagerVariableStore()
解释:保存动态图变量
P143 line24 z = tf.layers.dense(x,1, name=“l1”)
解释:tf.layers api中的全连接结构。
链接: tf.layers.dense()的用法.
P143 line31 container.trainable_variables()
解释:从实例化的tfe.EagerVariableStore类中的container对象中取出可训练迭代的参数变量。
P146 line19 tf.py_function()
解释:接收tensor转化成可直接显示和处理的数值进入函数并返回tensor。
链接: tf.py_function().
P148 line14 tf.logging.set_verbosity(tf.logging.INFO)
解释:将 TensorFlow 日志信息输出到屏幕
链接: tf.logging.set_verbosity (tf.logging.INFO).
P150 line42 tf.estimator.EstimatorSpec(mode, predictions=predictions)
解释:估算器返回值的对象实例,在这里模式为预测。
链接: tf.estimator.EstimatorSpec().
P150 line47 tf.metrics.mean(loss)
解释:Tensorflow内置的评估指标算子,这里用于求损失的平均,返回的是一个元组类型对象。
P152 line61 tf.estimator.Estimator()
解释:生成估算器,可以对模型进行评估和训练。
链接: tf.estimator.Estimator解析.
P158 line74 tf.estimator.inputs.numpy_input_fn()
解释:该方法直接把numpy变量的数据包装成一个输入函数返回。
P160 line7 tf.identity(loss, name=“loss”)
解释:复制op操作
链接: tf.identity解析.
P163 line50 dataset.make_one_shot_iterator().get_next()
解释:迭代器读取数据。本迭代器输出一次数据便将该数据丢弃。
链接: dataset.make_one_shot_iterator().get_next().
P165 line08 tfds.load()
解释:加载数据集,返回形式为DatasetV1Adapter类型。
链接: tfds.load()官方文档.
P167 line57 all_variables = (model.variables + optimizer.variables() + [global_step])
解释:由于动态图中没有获取全局变量的操作,需要手动添加模型变量。
P167 line60 tfds.as_numpy()
解释:将数据变成numpy格式
链接: tfds.as_numpy()官方文档.
P172 line40 model_3.fit()
解释:tf.keras用于训练模型的函数,指定好输入和迭代次数即可自动完成训练迭代过程。
P173 line48 model.evaluate
解释:tf.keras用于测试模型的函数,返回值有两个,损失值和精度值。
链接: model.evaluate 和 model.predict 的区别.
P174 line63 model.save_weights(’./kerash5log/kerash5model’,save_format = ‘h5’)
解释:这种方式保存模型虽然可以保存成tf格式,但是即使是h5格式还是tf格式,这种保存方式都只保存变量,不保存相关图操作,因此恢复模型需要复写网络结构,而不能像save一样直接用。
链接: save_weights().
P175 line68 tf.keras.models.model_from_json()
解释:keras保存模型的方法。结合下面的load_weights便可恢复模型及参数。
链接: tf.keras.models.model_from_json().
P178 line09 tf.expand_dims(inputs, 0)
解释:与np.expand_dims(x, axis=0)作用一样,这个实例中没有执行img_to_array的操作是因为此input是tf占位符形式,接下来使用tf中方法expand_dims就可完成扩展维度的操作,不需要转化成numpy数组的形式。
P183 line30 tf.estimator.TrainSpec()
解释:train_and_evaluate调用的“train”部分的配置。TrainSpec确定训练的输入数据以及持续时间。可选的钩子(hook)在不同训练阶段运行。
链接: tf.estimator.TrainSpec().
P183 line33 tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
解释:估算器分布式训练测试函数。
链接: tf.estimator.train_and_evaluate()详解.
tf.estimator.train_and_evaluate()官方文档.
P189 line56 tf.keras.estimator.model_to_estimator()
解释:keras模型转化成估算器模型的转换函数。
链接: tf.keras.estimator.model_to_estimator().
P191 line14 problems.available()
解释:在T2T框架中,problems为数据集的统称,此方法可以查看T2T框架下的所有可用数据集。
P192 line23 mnist_problem.generate_data(data_dir, tmp_dir)
解释:此方法可以直接返回预处理好的数据。
链接: mnist_problem.generate_data().
P193 line27 tfe.Iterator()
解释:动态图中迭代读取数据的方法。
链接: tfe.Iterator()
P194 line45 trainer_lib.create_hparams(“basic_1”, data_dir=data_dir, problem_name=“image_mnist”)
解释:模型类对象创建超参函数。
P195 line75 metrics.create_eager_metrics([metrics.Metrics.ACC, metrics.Metrics.ACC_TOP5])
解释:评估模型函数,函数里可选评估的类型。
P200 registry.list_models(),registry.list_hparams
解释:t2t中查看模型和超参的方法。
python语法分析
P132 line7 np.random.randn(*train_X.shape)
解释:numpy的随机函数,randn函数返回一个或一组样本,具有标准正态分布。
链接: np.random.randn().
P139 line56 getcost (train_X, train_Y).numpy()
解释:动态图中的tensor转换成numpy数据的方法。
链接:.numpy().
P177 line11 np.expand_dims(x, axis=0)
解释:扩展数组的形状,在第0维增加一维度。
P192 line14 os.path.expanduser()
解释:把path中包含的""和"user"转换成用户目录。
记录问题
P143 line14 应该是印刷问题,第二个reshape应该对象是train_Y。
P144 6.3.8 动态图中不支持共享变量,因此在动态图中尽量使用tf.layers与tf.keras接口。
P155 line63 这里由于estimator.train()方法中输入函数没有输入参数,因此这里采用Lambda 表达式的方法对原来有输入参数的train_input_fn进行了封装,书上还提供了另外两种方法,偏函数的形式和装饰器的形式。
P165 line09 prefetch(tf.data.experimental.AUTOTUNE):设置缓存操作?
P168 如果直接pip install tensorflow-datasets是安装最新版本的tensorflow-datasets,这样在运行实例21时会报出no module tensorflow.compat.v2的错误,此时降低tensorflow-datasets版本即可解决问题。
链接:问题参考链接.