TensorFlow各种操作
一图看懂tensorflow核心概念和流程
https://zhuanlan.zhihu.com/p/33801947
一个框架看懂优化算法之异同
https://zhuanlan.zhihu.com/p/32230623
详解深度学习中的normalization
https://zhuanlan.zhihu.com/p/33173246
https://yq.aliyun.com/articles/443058
tf.multiply和tf.matmul
tf.multiply()两个矩阵中对应元素各自相乘
tf.matmul()将矩阵a乘以矩阵b,生成a * b
使用tf.Variable时,如果检测到命名冲突,系统会自己处理。使用tf.get_variable()时,系统不会处理冲突,而会报错
tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None,
trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True,
custom_getter=None)
tf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True,
caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None,
import_scope=None)
tf.expand_dims(input, dim, name=None)
Dim表示加到位置的索引,当dim=-1时,加在最后。
TensorFlow中,想要维度增加一维,可以使用tf.expand_dims(input, dim, name=None)函数。当然,我们常用tf.reshape(input, shape=[])也可以达到相同效果,但是有些时候在构建图的过程中,placeholder没有被feed具体的值,这时就会包下面的错误:TypeError: Expected binary or unicode string, got 1
在这种情况下,我们就可以考虑使用expand_dims来将维度加1。
tf.squeeze()
从tensor中删除所有大小是1的维度
sess=tf.Session() 和with tf.Session() as sess的区别
https://blog.csdn.net/weixin_43224696/article/details/83349292
tf.nn.relu()函数是将大于0的数保持不变,小于0的数置为0
tf.nn.dropout()
https://blog.csdn.net/yangfengling1023/article/details/82911306
batch normalization原理与实战
输入分布不均—-Internal Covariate Shift,在神经网络的训练过程中对每层的输入数据加一个标准化处理。
Batch Normalization给隐藏层增加了噪音,有一定的正则化效果。
https://zhuanlan.zhihu.com/p/34879333
tensorflow中eval函数:
https://blog.csdn.net/jiaoyangwm/article/details/79248535
eval() 其实就是tf.Tensor的Session.run() 的另外一种写法,但两者有差别
eval(): 将字符串string对象转化为有效的表达式参与求值运算返回计算结果
eval()也是启动计算的一种方式。基于Tensorflow的基本原理,首先需要定义图,然后计算图,其中计算图的函数常见的有run()函数,如sess.run()。同样eval()也是此类函数,
要注意的是,eval()只能用于tf.Tensor类对象,也就是有输出的Operation。对于没有输出的Operation, 可以用.run()或者Session.run();Session.run()没有这个限制。
这其中最主要的区别就在于你可以使用sess.run()在同一步获取多个tensor中的值,
tf.sequence_mask(lengths,maxlen=None,dtype=tf.bool,name=None)
函数参数
lengths:整数张量,其所有值小于等于maxlen。
maxlen:标量整数张量,返回张量的最后维度的大小;默认值是lengths中的最大值。
dtype:结果张量的输出类型。
name:操作的名字。
import tensorflow as tf
a=tf.sequence_mask([1],2)
sess=tf.Session()
sess.run(tf.Print(a,[a]))
array([[True,False]],dtype=bool)
tf.sequence_mask([1, 3, 2], 5) # [[True, False, False, False, False],
# [True, True, True, False, False],
# [True, True, False, False, False]]
tf.sequence_mask([[1, 3],[2,0]]) # [[[True, False, False],
# [True, True, True]],
# [[True, True, False],
# [False, False, False]]]
tf.slice() 切割多维数组
import tensorflow as tf
a=tf.constant([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]],[[5,5,5],[6,6,6]]])
tf.slice(a,[1,0,0],[1,1,3])
<tf.Tensor ‘Slice:0’ shape=(1, 1, 3) dtype=int32>print(a)
Tensor(“Const:0”, shape=(3, 2, 3), dtype=int32)
tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换
tf.get_collection(key,scope=None)
用来获取一个名称是‘key’的集合中的所有元素,返回的是一个列表,列表的顺序是按照变量放入集合中的先后;
tensorflow中有一个计算梯度的函数tf.gradients(ys, xs),要注意的是,xs中的x必须要与ys相关,不相关的话,会报错。
tensorflow中打印tensor
import tensorflow as tf
dim=32
std=np.sqrt(2/dim)
res=tf.random_uniform([12,dim],-std,std)
session=tf.Session()
session.run(tf.Print(res,[res]))
tensorflow生成随机数tf.random_normal和tf.random_uniform和tf.truncated_normal和tf.random_shuffle
tf.random_normal,从正态分布中输出随机值。
tf.random_uniform,从均匀分布中返回随机值。
tf.truncated_normal,截断的正态分布函数。生成的值遵循一个正态分布,但不会大于平均值2个标准差
tf.random_shuffle,沿着要被洗牌的张量的第一个维度,随机打乱。
https://blog.csdn.net/tz_zs/article/details/75948350
理解tensorflow中session
Session 是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run() 可以获得你要得知的运算结果, 或者是你所要运算的部分.
因为 product 不是直接计算的步骤, 所以我们会要使用 Session 来激活 product 并得到计算结果.
tf.global_variables_initializer
使用tf.global_variables_initializer()添加节点用于初始化所有的变量。在你构建完整个模型并在会话中加载模型后,运行这个节点。
.ckpt文件与.ckpt.meta和.ckpt.index以及.pb文件之间的关系是什么?
- .ckpt文件是旧版本的输出saver.save(sess),相当于你的.ckpt-data(见下文)
- “checkpoint”文件仅用于告知某些TF函数,这是最新的检查点文件。
- .ckpt-meta 包含元图,即计算图的结构,没有变量的值(基本上你可以在tensorboard / graph中看到)。
- .ckpt-data包含所有变量的值,没有结构。要在python中恢复模型,您通常会使用元数据和数据文件(但您也可以使用该.pb文件): saver = tf.train.import_meta_graph(path_to_ckpt_meta) saver.restore(sess, path_to_ckpt_data)
- 我不确切地知道.ckpt-index,我想这是内部需要的某种索引来正确映射前两个文件。无论如何,它通常不是必需的,你可以只用.ckpt-meta和恢复一个模型.ckpt-data。
- 该.pb文件可以保存您的整个图表(元+数据)。要在c ++中加载和使用(但不训练)图形,您通常会使用它来创建freeze_graph,它会.pb从元数据和数据创建文件。要小心,(至少在以前的TF版本和某些人中)py提供的功能freeze_graph不能正常工作,所以你必须使用脚本版本。Tensorflow还提供了一种tf.train.Saver.to_proto()方法,但我不知道它究竟是做什么的。
opt = tf.train.AdamOptimizer(learning_rate=0.01)
init(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=‘Adam’)
此函数是Adam优化算法:是一个寻找全局最优点的优化算法,引入了二次方梯度校正。
相比于基础SGD算法,1.不容易陷于局部优点。2.速度更快
使用tensorflow搭建简单的全连接神经网络
https://blog.csdn.net/zhangcheng_95/article/details/81260685
train_rmse = wals.get_rmse(output_row, output_col, Gmat)
均方根误差,也成标准误差
tf.reduce_sum(a,0 or 1 or 2)
当arg2等于2时,实际在走下图中对角线方向进行计算