桌面云上tensorflow1.2,linux服务器上tensorflow1.4
说明文档
https://www.tensorflow.org/get_started/?hl=zh-cn
windows下安装
pip install tensorflow
来自 <https://blog.csdn.net/zhuzhishi2042/article/details/72888312>
教程
https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/
GPU使用
http://www.tensorfly.cn/tfdoc/how_tos/using_gpu.html
LeNet
https://blog.csdn.net/d5224/article/details/68928083
详细讲解
https://blog.csdn.net/yanzi6969/article/details/78019683
代码实现
https://blog.csdn.net/jeryjeryjery/article/details/79426907
https://blog.csdn.net/VictoriaW/article/details/72354307
tensorflow车牌识别
https://blog.csdn.net/ShadowN1ght/article/details/78571187
官方中文文档
http://www.tensorfly.cn/tfdoc/get_started/introduction.html
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
第一个参数input:[batch, in_height, in_width, in_channels] batch为-1表示自动
第二个参数filter:[filter_height, filter_width, in_channels, out_channels]
第三个参数strides:一个一维的向量,长度4,其规定前后必须为1,所以我们可以改的是中间两个数,中间两个数分别代表了水平滑动和垂直滑动步长值。[1,stride,stride,1]
第四个参数padding:只能是"SAME","VALID"其中之一
第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,这个输出,就是我们常说的feature map
https://zhuanlan.zhihu.com/p/26139876
tf.nn.max_pool(value, ksize, strides, padding, name=None)
第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape
第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1
第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]
第四个参数padding:和卷积类似,可以取'VALID' 或者'SAME'
返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式
https://blog.csdn.net/mao_xiao_feng/article/details/53453926
padding='SAME'
https://www.cnblogs.com/qggg/p/6832705.html
在卷积核移动逐渐扫描整体图时候,因为步长的设置问题,可能导致剩下未扫描的空间不足以提供给卷积核的大小扫描,比如有图大小为5*5,卷积核为2*2,步长为2,卷积核扫描了两次后,剩下一个元素,不够卷积核扫描了,这个时候就在后面补零,补完后满足卷积核的扫描,这种方式就是same。如果说把刚才不足以扫描的元素位置抛弃掉,就是valid方式。
https://blog.csdn.net/qq_28752595/article/details/80059302
常量(tf.constant)与变量(tf.Varialbe)
https://blog.csdn.net/yjk13703623757/article/details/77075711
tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)
https://www.jianshu.com/p/474de963b46f
ValueError: At least two variables have the same name: Variable_3
解决:tf.reset_default_graph()
https://blog.csdn.net/ztf312/article/details/72854906
tf.nn.embedding_lookup
https://www.jianshu.com/p/677e71364c8e
当我们用 Python 操作 Tensorflow 时,我们用 Python 代码做的第一件事是组装计算图。之后我们的第二个任务就是与它进行交互(使用 Tensorflow 的“会话”)。
计算图实质上是一个全局数据结构:计算图是一个有向图,捕获有关计算方法的指令。
计算图只包含计算步骤,不包含结果。
会话的作用是处理内存分配和优化,使我们能够实际执行由图形指定的计算。
可以将计算图想象为我们想要执行的计算的“模板”:它列出了所有的步骤。为了使用这个图表,我们还需要发起一个会话,它使我们能够实际地完成任务。
创建会话对象后,可以使用 sess.run(node) 返回节点的值,并且 Tensorflow 将执行确定该值所需的所有计算。
一般来说,sess.run() 调用往往是最大的 TensorFlow 瓶颈之一,所以调用它的次数越少越好。可以的话在一个 sess.run() 调用中返回多个项目,而不是进行多个调用。
占位符是一种用于接受外部输入的节点。为了提供一个值,我们使用 sess.run() 的 feed_dict 属性。
两种类型的“无祖先”节点:tf.constant(每次运行都一样)和 tf.placeholder(每次运行都不一样)。
要创建变量,请使用 tf.get_variable()。tf.get_variable(name,shape)。name 是一个唯一标识这个变量对象的字符串。它在全局图中必须是唯一的,所以要确保不会出现重复的名称。shape 是一个与张量形状相对应的整数数组,它的语法很直观——每个维度对应一个整数,并按照排列。
一个变量节点在首次创建时,它的值基本上就是“null”,任何尝试对它进行计算的操作都会抛出这个异常。我们只能先给一个变量赋值后才能用它做计算。有两种主要方法可以用于给变量赋值:初始化器和 tf.assign()。
带有变量共享的 Tensorflow 代码,代码有它们的作用域,并设置“reuse=True”。我强烈建议你不要在代码中使用变量共享。
在深度学习中,典型的“内循环”训练如下:
获取输入和 true_output
根据输入和参数计算出一个“猜测”
根据猜测和 true_output 之间的差异计算出一个“损失”
根据损失的梯度更新参数
optimizer = tf.train.GradientDescentOptimizer(1e-3) 不会向图中添加节点。它只是创建了一个 Python 对象,包含了一些有用的函数。
train_op = optimizer.minimize(loss),将一个节点添加到图中,并将一个指针赋给 train_op。
检查中间值的一种方法是向 sess.run() 添加一个返回参数,该参数指向要检查的每个中间节点,然后在返回后打印它。
用 tf.Print 进行调试。最好在创建要复制的节点后立即创建 tf.Print 节点。
https://juejin.im/post/5b345a49f265da599c561b25