
tensorflow 1.15
文章平均质量分 55
补充学习
小汣结
博客存放代码注解;
github存放代码;
blibli存放视频;
展开
-
Tensorflow 激活函数
1. tanh1.1 图像1.2 调用tf.nn.tanh1.3 适用比较常用的激活函数.2. sigmoid2.1 图像注意:当值>=3时,就已经趋向于饱满了。2.2 调用tf.nn.sigmoid2.3 适用一般用于二分类问题中.3. relu3.1 图像3.2 调用tf.nn.relu3.3 适用如果向量中存在大量0,或者大量负数,可以考虑舍弃。4. Leaky ReLU4.1 图像4.2 调用tf.nn.leaky_relu其中al原创 2021-05-26 19:39:04 · 324 阅读 · 0 评论 -
Tensorflow查看某一层的权重
一、查看权重name.1.1 tf.trainable_variables()for v in tf.trainable_variables(): print(v)这个的运行无需sess.1.2举例: dense层.with tf.variable_scope("generation"): o = tf.layers.dense(i, units=10)那么该dense的权重名即为generation/dense/kernel:0,偏置即为generation/dense/bias:0原创 2021-05-26 11:04:27 · 2810 阅读 · 0 评论 -
tensorflow中的梯度
一、通过梯度裁剪减轻梯度消失和梯度爆炸1.1 根据value值裁剪.optimizer = tf.train.AdamOptimizer(learning_rate=lr)gvs = optimizer.compute_gradients(cost)capped_gvs = [(tf.clip_by_value(grad, clip_value_min=-1, clip_value_max=1), var) for grad, var in gvs]train_op = optimizer.app原创 2021-05-18 15:21:14 · 947 阅读 · 0 评论 -
Tensorflow 损失函数
一、经典损失函数1.1 分类问题1.1.1 cross entropy刻画概率之间的距离.1.1.1.1 自实现使用tf.clip_by_value粗略估计。cross_entropy = -tf.reduce_mean( y * tf.log(tf.clip_by_value(predict, 1e-10, 1.0)) )*表示矩阵点乘1.1.1.2 tf.nn.softmax_cross_entropy_with_logits_v2tf.nn.softmax_cros原创 2021-04-06 10:13:32 · 925 阅读 · 0 评论 -
Tensorflow-维度
一、获取维度1.1 tf.shape()1.1.1 函数信息tf.shape( input, name=None, out_type=tf.dtypes.int32)out_type:返回的结果是哪种类型的Tensor。注意:返回的结果是Tensor。1.2 get_shape().as_list()Tensor类型,可以调用该函数得到各个维度信息。1.2.1 函数信息返回的结果是List。1.2.2 代码Q = tf.placeholder(shape=[None,原创 2021-04-05 13:37:57 · 370 阅读 · 2 评论 -
Tensorflow global_step
一、基本一次梯度更新算一个step1.1 创建# 这个其实是获取, 所以global_step必须之前有值,否则会报错。tf.train.get_global_step(graph=None)# 这个是创建.tf.train.get_or_create_global_step(graph=None)二、高级1.1 手动更新global_step = tf.train.get_or_create_global_step()op = tf.assign(global_step, gl原创 2021-03-31 10:19:41 · 402 阅读 · 0 评论 -
TensorBoard-高级
一、计算图结构1.1 节点之间节点之间有两种不同的边:实线:刻画了数据传输,边上箭头方向表达了数据传输的方向,边上标注了张量的维度信息:比如?x784表明batch大小不固定。效果图上边的粗细表示传输的标量维度总大小,而不是传输的标量个数,当维度无法确定,使用最细的边来表示。虚线:虚边表达了计算之间的依赖关系。1.2 主图、辅图TensorBoard 会智能调整可视效果图上节点,TensorFlow 部分计算节点会有比较多的依赖关系,如果全部画在一张图上会使可视化得到的效果图非常拥挤。于原创 2021-03-30 22:59:02 · 305 阅读 · 0 评论 -
Tensorflow Embedding
一、随机初始化Embedding1.1 原理Embedding其实就是个lookup table, 通过tf.nn.embedding_lookup()来调用Embedding.注意:在调用Embedding后,可以考虑使用dropout层。注意:在Embedding内,可以考虑对提取的vector做缩放。见于《Attention is all you need》1.2 示例代码这是关于Embedding层的相关代码。def embedding(inputs, vocab_size, num_原创 2021-03-28 17:55:14 · 1253 阅读 · 0 评论 -
tensorflow 常用学习率函数
一、基本学习率1.1 指数衰减1.1.1 函数参数def polynomial_decay(learning_rate, global_step, decay_steps, end_learning_rate=0.0001, power=1.0, cycle=False,原创 2021-03-27 19:06:56 · 765 阅读 · 0 评论 -
Tensorflow-命名空间
一、变量管理当神经网络的结构更加复杂、参数更多时,需要更好的方式传递和管理神经网络中的参数。Tensorflow提供了通过变量名称来创建或获取一个变量的机制,通过该机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过参数的形式到处传递。通过用tf.get_variable和tf.variable_scope实现的。1.1 tf.get_variable()1.1.1 函数参数tf.get_variable( name, shape=None, dtype=None,原创 2021-03-25 10:48:42 · 360 阅读 · 0 评论 -
Tensorflow遇到的问题
一、初级Failed precondition: Attempting to use uninitialized value decoder/num_blocks_0/vanilla_attention/dense/biasCannot interpret feed_dict key as Tensor: Tensor Tensor(“Placeholder:0”, shape=(?, 15, 50), dtype=int32) is not an element of this graph....原创 2021-03-20 22:05:41 · 1937 阅读 · 0 评论 -
tf.TensorArray (tensor动态数组)
一、基本介绍和Tensor的主要区别是动态数组, 随时可以读取. 可以用在RNN每个时刻的states.tf.TensorArray参数:def __init__(self, dtype, size=None, dynamic_size=None, clear_after_read=None, tensor_array_name=None,原创 2021-03-08 09:36:26 · 1680 阅读 · 4 评论 -
Tensorflow Seq2Seq使用
一、Helper类1.1 简单介绍 目前Seq2Seq包含的Helper主要有TrainingHelper和GreedyEmbeddingHelper.TrainingHelper:如名字所说, 适用在训练阶段,功能是: Teacher Forcing.GreddyEmbeddingHelper: 适用在测试阶段。1.2 参数结构TrainingHelpertf.contrib.seq2seq.TrainingHelper(inputs, # (batch_size, seq原创 2021-03-04 20:56:57 · 658 阅读 · 3 评论 -
Tensorflow Attention机制
以下为原博客的部分摘录1、概述AttentionMechanism: 所有attention机制的父类, 内部没有任何实现。_BaseAttentionMechanism: 继承自AttentionMechanism, 定义了attention机制的一些公共方法实现和属性。BahdanauAttention和LuongAttention:均继承自_BaseAttentionMechanism,分别实现了1.2节所述的两种attention机制。AttentionWrapper: 用于封装RNNC原创 2021-03-04 11:14:17 · 585 阅读 · 1 评论 -
Tensorflow RNN相关——高级
一、Wrapper装饰器1. Wrapper结构以tf.nn.rnn_cell.DropoutWrapper为例:@tf_export("nn.rnn_cell.DropoutWrapper") # 起了个名字. class DropoutWrapper(RNNCell): # 这里看出继承了RNNCell def __init__(self, cell, ....): """ 仅涉及变量的初始化和assert. """ def __call_原创 2021-03-03 16:47:24 · 174 阅读 · 2 评论 -
Tensorflow RNN相关——基本
一、循环神经网络RNN 随着更加有效的循环神经网络结构不断提出, 循环神经网络挖掘数据中的时序信息以及语义信息的深度表达能力被充分利用,在语音识别、语言模型、机器翻译以及时序分析等方面实现了突破。 循环神经网络的总损失为所有时刻(或者部分时刻)上的损失函数的总和。 理论上循环神经网络支持任意长度的序列,然而在实际训练过程中,如果序列过长,一方面会导致优化时出现梯度消散和梯度爆炸的问题,另一方面,展开后的前馈神经网络会占用过大的内存,实际中一般会规定一个最大长度,当序列长度超过规定长度之后会对序列原创 2021-03-03 11:48:59 · 179 阅读 · 0 评论 -
tensorflow常用网络
一、Dense层方法一:from tensorflow.contrib.layers.python.layers import initializersdense = tf.layers.Dense(units=1, activation=None, kernel_initializer=initializers.xavier_initializer(), use_bias=False)sequence_input = dense(sta原创 2020-10-07 13:43:08 · 322 阅读 · 0 评论 -
model类定义
Network的写法一般有以下几种.一、都写入__init__中 像bert的网络模型就是这种, 好奇计算图是怎么工作的。一次init就能一直计算?二、__init__和infer分离 __init__中只存放网络层,infer中存放逻辑推理部分。 好处是可以保证多次infer, 网络只初始化一次, 比如在对抗训练中。...原创 2020-10-07 13:30:38 · 524 阅读 · 0 评论 -
不同位置使用同一个name_scope()
方法一:在name后面加一个/with tf.name_scope('hha'): a = tf.zeros(1,name='a')with tf.name_scope('hha/'): b = tf.zeros(1,name='b')print(a.name)print(b.name)原创 2020-10-07 13:20:21 · 125 阅读 · 0 评论 -
Tensorflow中的Variable
1、tf.global_variables_initializer() 如果计算图中有tf.Variable()或者tf.get_variable(),则需要通过tf.global_variables_initializer()对变量进行初始化。 如果只有tf.Constant则无需variables_initializer()。 注意:with tf.Graph().as_default(): [...模型定义...] “预训练模型加载.” tvars = tf.trainable_var原创 2020-10-02 14:50:10 · 303 阅读 · 0 评论 -
tensorflow的基本知识
一、tensorflow的基本类型tf.bool 特别注意: tf.bool的基本操作和python中的bool是不相同的, 首先:tf.bool是不支持缩写的if tf.bool:和if not tf.bool:这种tensorflow是无法识别的。需要改写为if tf.bool == Ture:和if tf.bool == False这种形式。 其次, tf.bool是不支持取反操作的。...原创 2020-10-02 10:27:15 · 532 阅读 · 0 评论 -
ckpt的使用
一、文件结构checkpoint 该文件中存放着ckpt的路径,以及当前路径下所有的模型参数节点。saver.store()的时候会从这个配置中进行模型加载。原创 2020-09-30 13:32:06 · 5192 阅读 · 0 评论 -
异常报错
Tensorflow常见的问题:Cannot interpret feed_dict key as Tensor: 是因为feed_dict中的key在计算图中找不到。sess.run(loss, feed_dict={"input_ids":inputs, "labels":labels}) 上面代码的错误在于将key"input_ids"写成了字符串,正确如下:sess.run(loss, feed_dict={input_ids:inputs, labels:labels}.原创 2020-09-22 09:17:57 · 362 阅读 · 1 评论 -
tf.gradient()和tf.stop_gradient()
参考资料一、注意点:tf.gradient(loss, var) 这里的var必须和loss挂钩,如果不挂钩会报NoneError错误,即说明该变量没有梯度。grad = tf.stop_gradient(grad) 截断grad结点之前的梯度,相当于电路__grad这个灯泡不亮了。...原创 2020-09-22 09:08:07 · 360 阅读 · 0 评论 -
tf.train.Supervisor()与tf.train.saver()的区别
参考链接(https://blog.youkuaiyun.com/ei1990/article/details/77948001)转载 2020-09-20 20:00:30 · 170 阅读 · 0 评论 -
tf.identity()和tf.assign()
一、tf.identity()参考官网(https://www.tensorflow.org/api_docs/python/tf/identity)a = tf.constant([0.78])a_identity = tf.identity(a)a.numpy() # 0.78a_identity.numpy() # 0.78a.assign_add(1)a.numpy() # 1.78a_identity.numpy()原创 2020-09-20 19:58:54 · 330 阅读 · 0 评论 -
滑动平均tf.train.ExponentialMovingAverage()
参考博客: https://blog.youkuaiyun.com/kuweicai/article/details/80517284一、原理shadow_variable = decay * shadow_variable + (1 - decay) * variableshadow_variable是之前浅拷贝的旧值, variable是新值。二、作用1、缓解模型训练时的振荡。2、在模型振荡频率较高的时候有较好的效果。三、效果use averaged parameters sometimes p原创 2020-09-20 18:55:45 · 173 阅读 · 0 评论 -
tf.nn.dropout使用参考
一、 embedding + dropout.embedded = tf.nn.embedding_lookup(self.var, x)if self.keep_prob < 1.: shape = embedded.get_shape().as_list() # Use same dropout masks at each timestep with specifying noise_shape. # This slightly improves performance.原创 2020-09-20 16:48:23 · 316 阅读 · 0 评论 -
tensorflow基本操作
一、生成指定维度数据tf.random_normal(shape=(2, 3)) 按照正态分布的方式, 生成了shape=(2, 3)的数据。原创 2020-09-20 09:57:46 · 105 阅读 · 0 评论 -
tf.data.Dataset使用
一、参数使用: 该类在eager模式和非eager模式下的使用是不一致的.drop_remainder = True 这里设置成True, 会丢弃最后多余的,不是一个batch的数据。from_tensor_slices() 参数可以是:dict : {“token_ids”: [[1, 2, 3, 0, 0], [5, 6, 7, 8, 9], [1, 1, 1, 1, 1]], “labels”:[1, 2, 3]} 也可以是: tuple: (input_array, lab原创 2020-09-18 19:55:09 · 641 阅读 · 0 评论 -
Tensorflow计算图越来越大原因定位
一、问题:调用saver.save()的时候提示要保存的东西太大了,然后报错。 原因是计算图越来越大。二、定位:计算图越来越大,而可训练的参数量一直不变1、直接看保存的ckpt. 查看不同epoch下的.data-00000-of-00001发现文件大小不变,说明可训练的参数不变。 查看不同epoch下的.meta发现文件变大,说明计算图不断变大。2、在程序中统计可训练的变量个数def count_all_parameters(): total_parameters = 0原创 2020-09-18 11:42:17 · 645 阅读 · 0 评论 -
Tensorboard的使用
一、原理 Tensorboard是通过读取日志文件, 绘制图结构和一些scalar变量的。 如果每次运行都在同一个日志文件,那么Tensorboard会将其合并起来,因此需要使用不同的日志文件。二、设置不同的日志文件 这里用时间戳来设置。from datetime import datetimenow = datetime.utcnow().strftime("%Y%m%d%H%M%S")root_logdir = "tf_logs"logdir = "{}/run-{}/".form原创 2020-09-16 21:52:03 · 366 阅读 · 0 评论 -
tensorflow持久层
1、模型保存init = tf.global_variables_initializer()saver = tf.train.Saver(tf.global_variables(), max_to_keep=1)with tf.Session() as sess: sess.run(init) for epoch in range(epoches): if epoch % 100 == 0: save_path = saver.save(sess, "/tmp/my_model.原创 2020-09-16 20:44:11 · 218 阅读 · 0 评论 -
Tensorflow中的图操作和图变量
一、可能引起的问题:1.图操作重复载入会导致模型变量越来越大,调用saver保存时可能报错。 错误信息:Cannot serialize protocol buffer of type tensorflow.GraphDef as the serialized size (2392135075bytes) would be larger than the limit (2147483647 bytes) 可能存在的问题:tf.convert_to_tensor: 图操作将numpy转为ten原创 2020-09-16 08:01:13 · 669 阅读 · 2 评论 -
使用tqdm监督处理进度
1、使用tqdm监督处理进度from tqdm import tqdm# tqdmfor example in tqdm(examples_list, desc="process_data"): 开始遍历desc是进度条显示的名字, 用 tqdm 像 enumerate 一样包裹可迭代对象即可。原创 2020-09-15 08:05:04 · 185 阅读 · 0 评论 -
tensorflow中的dynamic_rnn
一、什么是dynamic_rnn? 动态RNN是说:一个batch中的文本数据长度不一致, 文本没有padding到固定长度。 所以调用时的sequence_length长度shape=[batchsize]原创 2020-09-14 17:05:16 · 226 阅读 · 0 评论 -
tensorflow中的tf.group()和tf.tuple()
一、tensorflow中的tf.group()1.用处 tf.group()常用于组合一些训练节点,如在Cycle GAN中的多个训练节点,例子如:generator_train_op = tf.train.AdamOptimizer(g_loss, ...)discriminator_train_op = tf.train.AdamOptimizer(d_loss,...)train_ops = tf.groups(generator_train_op ,discriminator_trai原创 2020-09-14 16:09:27 · 703 阅读 · 0 评论 -
tensorflow中的global_step
一、tensorflow中的global_step1、tf.train.get_or_create_global_step() bert中的optimization.py中有以下一段代码:def create_optimizer(loss, init_lr, num_train_steps): global_step = tf.train.get_or_create_global_step() """省略无用代码""" optimizer = AdamWeightDecayOptimizer(原创 2020-09-13 20:20:30 · 1046 阅读 · 0 评论