1、【TensorFlow】tf.nn.max_pool实现池化操作(https://blog.csdn.net/mao_xiao_feng/article/details/53453926)
https://blog.csdn.net/m0_37586991/article/details/84575325
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]这种形式
2、Padding两个模式的区别:SAME and VALID(https://blog.csdn.net/m0_51004308/article/details/114284366)
3、python中的一维卷积conv1d和二维卷积conv2d(https://blog.csdn.net/qq_26552071/article/details/81178932)
给定4维的输入张量和滤波器张量来进行2维的卷积计算。
4、卷积神经网络池化后的特征图大小计算(https://blog.csdn.net/qq_26552071/article/details/81171161)
https://blog.csdn.net/aron_conli/article/details/95175757
W:矩阵宽,H:矩阵高,F:卷积核宽和高,P:padding(需要填充的0的个数),N:卷积核的个数,S:步长
width:卷积后输出矩阵的宽,height:卷积后输出矩阵的高
width = (W - F + 2P)/ S + 1
height = (H - F + 2P) / S + 1
当conv2d(), max_pool()中的padding=‘SAME’时,width=W,height=H,当padding=‘valid’时,P=0
输出图像大小:(width,height,N)
池化后的大小
width = (W - F)/ S + 1
height = (H - F) / S + 1
5、tf.matmul函数用法(https://blog.csdn.net/weixin_41845265/article/details/106863171)
函数:tf.matmul
表示:将矩阵 a 乘以矩阵 b,生成a * b
6、tf.truncated_normal的用法(https://blog.csdn.net/hgnuxc_1993/article/details/117263654)
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) :
shape表示生成张量的维度(a * a),mean是均值,stddev是标准差
这个函数产生正态分布,均值和标准差自己设定。这是一个截断的产生正态分布的函数,生成的值服从具有指定平均值和标准偏差的正态分布,换句话说,产生的值如果与均值的差值大于两倍的标准差则丢弃重新选择。和一般的正态分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。
在正态分布的曲线中:
横轴区间(μ-σ,μ+σ)内的面积为68.268949%
横轴区间(μ-2σ,μ+2σ)内的面积为95.449974%
横轴区间(μ-3σ,μ+3σ)内的面积为99.730020%
X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这称之为正态分布的“3σ”原则。
在tf.truncated_normal中如果x的取值在区间(μ-2σ,μ+2σ)之外则重新进行选择。这样保证了生成的值都在均值附近。
7、tensorflow之tf.Variable()函数(https://blog.csdn.net/qq_43636375/article/details/108689388)
tf.Variable()函数用于创建变量(Variable),变量是一个特殊的张量(),其可以是任意的形状和类型的张量。
注意: 在启动图时(进行操作之前),所有的变量必须被明确定义。变量常用来储存和更新参数,在计算图过程中其值会一直保存至程序运行结束,这点正是区别于一般的张量。一般的Tensorflow张量在运行过程中仅仅是从计算图中流过,并不会被保存下来。涉及到变量的相关操作必须通过session会话控制。
特别注意:在tensorflow的世界里变量的定义和初始化是被分开的。
初始化变量:之前是用tf.initialize_all_variables()函数,但是在2017年3月2号之后,该函数不再使用,用 tf.global_variables_initializer() 替代 tf.initialize_all_variables()
tf.global_variables_initializer()用于初始化所有变量;w.initializer用于初始化单个变量。
8、TensorFlow创建常量(tf.constant)详解(https://blog.csdn.net/csdn_jiayu/article/details/82155224)
可以看到第一个值value是必须的,可以是一个数值,也可以是一个列表。
如果是数值:
tensor=tf.constant(1)
为查看结果必须创建一个会话,并用取值函数eval()来查看创建的tensor的值:
sess=tf.Session()
with sess.as_default():
print('结果是:', tensor.eval())
结果是:1
9、tf.nn.dropout()的用法(https://blog.csdn.net/yangfengling1023/article/details/82911306)
tf.nn.dropout()是tensorflow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层
Dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了
tf.nn.dropout函数说明
tf.nn.dropout(
x,
keep_prob,
noise_shape=None,
seed=None,
name=None
)
参数说明:
x:指输入,输入tensor
keep_prob: float类型,每个元素被保留下来的概率,设置神经元被选中的概率,在初始化时keep_prob是一个占位符, keep_prob = tf.placeholder(tf.float32) 。tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5
train的时候才是dropout起作用的时候,test的时候不应该让dropout起作用
10、tf.nn.softmax_cross_entropy_with_logits详解(https://blog.csdn.net/weixin_39568744/article/details/97265990)
https://blog.csdn.net/yhily2008/article/details/80262321
11、tf.train.AdamOptimizer()(https://blog.csdn.net/qq_39852676/article/details/98477214)
https://www.cnblogs.com/tingtin/p/12558615.html
https://www.freesion.com/article/6384422785/
init(
learning_rate=0.001,
beta1=0.9,
beta2=0.999,
epsilon=1e-08,
use_locking=False,
name='Adam'
)
参数含义:
learning_rate: A Tensor or a floating point value. (学习率)
beta1: A float value or a constant float tensor. (一阶矩估计的指数衰减率)
beta2: A float value or a constant float tensor. (二阶矩估计的指数衰减率)
epsilon: A small constant for numerical stability. (一个非常小的数,防止除以零)
use_locking: 如果为真,则使用锁进行更新操作。
name: 使用梯度时创建的操作的可选名称,默认为 “Adam”。
12、tf.argmax()的用法(https://blog.csdn.net/qq_35535616/article/details/111139044)
https://blog.csdn.net/xufeng930325/article/details/122895016
tf.argmax()的主要功能是找出最大值并返回索引,注意是索引。下面是主要的内参数
import tensorflow as tf
import tensorflow.compat.v1 as tf1
tf1.disable_eager_execution()
a =[[1,2,3],[4,5,6],[1,5,4]]
b = [1,2,3,4,5,6,7,8,9,10,0]
with tf1.Session() as sess:
print(sess.run(tf.argmax(a, 0)))
print(sess.run(tf.argmax(a, 1)))
print(sess.run(tf.argmax(b, 0)))
2020-12-14 09:19:14.848367: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
[1 1 1]
[2 2 1]
9
13、tenflow 入门 tf.equal()用法(https://blog.csdn.net/ustbbsy/article/details/79564529)
equal,相等的意思。顾名思义,就是判断,x, y 是不是相等,它的判断方法不是整体判断,
而是逐个元素进行判断,如果相等就是True,不相等,就是False。
import tensorflow as tf
a = [[1,2,3],[4,5,6]]
b = [[1,0,3],[1,5,1]]
with tf.Session() as sess:
print(sess.run(tf.equal(a,b)))
[[ True False True]
[False True False]]
14、tf.cast()函数介绍和示例(https://blog.csdn.net/qq_36512295/article/details/100599954)
数据类型转换
import tensorflow as tf
X = tf.constant([1,2,3,4,5], dtype=tf.int32)
Y = tf.cast(X, dtype=tf.float32)
with tf.Session() as sess:
print('X:', sess.run(X))
print('Y:', sess.run(Y))
X: [1 2 3 4 5]
Y: [1. 2. 3. 4. 5.]
15、tf.reduce_mean()函数解析(https://blog.csdn.net/TeFuirnever/article/details/88929223)
tf.reduce_mean()函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的平均值,主要用作降维或者计算tensor(图像)的平均值。
import tensorflow as tf
x = [[1,2,3],
[4,5,6]]
y = tf.cast(x, tf.float32)
mean_all = tf.reduce_mean(y)
mean_0 = tf.reduce_mean(y, axis=0)
mean_1 = tf.reduce_mean(y, axis=1)
with tf.Session() as sess:
m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
print(m_a)
print(m_0)
print(m_1)
3.5
[2.5 3.5 4.5]
[2. 5.]
16、tf.global_variables_initializer()与tf.local_variables_initializer()的区别(https://cloud.tencent.com/developer/article/1454136)
tf.global_variables_initializer()添加节点用于初始化所有的变量(GraphKeys.VARIABLES)。返回一个初始化所有全局变量的操作(Op)。在你构建完整个模型并在会话中加载模型后,运行这个节点。
能够将所有的变量一步到位的初始化,非常的方便。通过feed_dict, 你也可以将指定的列表传递给它,只初始化列表中的变量。
tf.local_variables_initializer()返回一个初始化所有局部变量的操作(Op)。初始化局部变量(GraphKeys.LOCAL_VARIABLE)。GraphKeys.LOCAL_VARIABLE中的变量指的是被添加入图中,但是未被储存的变量。
https://blog.csdn.net/qq_39018604/article/details/120833800
必须要使用global_variables_initializer的场合
含有tf.Variable的环境下,因为tf中建立的变量是没有初始化的,也就是在debug时还不是一个tensor量,而是一个Variable变量类型
size_out = 10
tensor = tf.Variable(tf.random_normal(shape=[size_out]))
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init) # initialization variables
print(sess.run(tensor))
可以不适用初始化的场合
不含有tf.Variable、tf.get_Variable的环境下
比如只有tf.random_normal或tf.constant等
size_out = 10
tensor = tf.random_normal(shape=[size_out]) # 这里debug是一个tensor量哦
init = tf.global_variables_initializer()
with tf.Session() as sess:
# sess.run(init) # initialization variables
print(sess.run(tensor))
17、tf.train.Saver() 与tf.train.import_meta_graph要点
image.png
tf.train.import_meta_graph用来加载meta文件中的图,以及图上定义的结点参数包括权重偏置项等需要训练的参数,也包括训练过程生成的中间参数,所有参数都是通过graph调用接口get_tensor_by_name(name="训练时的参数名称")来获取
18、tf.train.latest_checkpoint()自动寻找最新的checkpoint(https://blog.csdn.net/weixin_44305115/article/details/106717518)
tf.train.latest_checkpoint()函数的作用查找最新保存的checkpoint文件的文件名(Finds the filename of latest saved checkpoint file.)。
经常与模型加载函数checkpoint.restore()共同使用。
19、saver.save和saver.restore(https://blog.csdn.net/qq_40133431/article/details/121342927)
saver()与restore()只是保存了session中的相关变量对应的值,并不涉及模型的结构。
Saver的作用是将我们训练好的模型的参数保存下来,以便下一次继续用于训练或测试;Restore则是将训练好的参数提取出来。Saver类训练完后,是以checkpoints文件形式保存。提取的时候也是从checkpoints文件中恢复变量。Checkpoints文件是一个二进制文件,它把变量名映射到对应的tensor值 。
一般地,Saver会自动的管理Checkpoints文件。我们可以指定保存最近的N个Checkpoints文件,当然每一步都保存ckpt文件也是可以的,只是没必要,费存储空间。
20、sess.graph.get_tensor_by_name('W_conv1:0')(https://blog.csdn.net/baidu_27643275/article/details/82982889)
形如'conv1'是节点名称,而'conv1:0'是张量名称,表示节点的第一个输出张量
https://www.jianshu.com/p/3cee7ca5ebd8
21、获取Tensorflow版本(https://blog.csdn.net/dlhlSC/article/details/56840501)
import tensorflow as tf;
print(tf.version)
22、tf.Graph()(https://blog.csdn.net/william_hehe/article/details/78617994)
tf.Graph()
功能:生成新的计算图。
说明:不同计算图上的张量和运算都不会共享。
23、Keras和tensorflow的区别(https://blog.csdn.net/zhangbaoanhadoop/article/details/82111056)
24、
网友评论