https://blog.csdn.net/sinat_33761963/article/details/62433234
https://blog.csdn.net/shenxiaolu1984/article/details/52815641
https://blog.csdn.net/guvcolie/article/details/77686555
https://zhuanlan.zhihu.com/p/35203106 (这个知乎的讲的比较易读,slim也是对tf.nn进行的一些较为高层封装,目的为能够快速构建模型,我认为其最让我喜欢的功能就是stack、arg_scope和repeat,能让模型更加精致。)
https://blog.csdn.net/u014365862/article/details/77833481
tf.contrib是最不稳定的,建议少用,这三个官方一直更为推荐的是tf.layers,虽然也是对tf.nn的封装,但是比较友好,所以其实现在有三个选择面向tfboy 和tfgirl,slim,tf.layers,tf.keras,tf.keras和动态图模式、生产环境的Estimator部分兼容,感觉用tf.keras会越来越多,虽然现在pytorch真的不错。
https://ai.googleblog.com/2017/10/eager-execution-imperative-define-by.html
https://www.zhihu.com/question/67471378 (知乎的这个不错)
动态图模式中使用tf.data.Dataset这个API进行输入:https://www.tensorflow.org/api_docs/python/tf/data/Dataset
模型的构建官网推荐使用tf.keras的API:https://www.tensorflow.org/api_docs/python/tf/keras
https://www.tensorflow.org/guide/custom_estimators
卷积和反卷积总结:
1, 参数计算:
反卷积(转置卷积)tensorflow下的API详解:
deconv = tf.nn.conv2d_transpose(x, kernel, output_shape=output_shape, strides=[1, d_h, d_w, 1], padding=’SAME’)
‘’’
:param x: 输入的将被反卷积的对象
:param kernel: 卷积核[k_h, k_w, out_channel(你输出featuremap的通道数), in_channel(x的通道数)]为什么是反的,后面推导证明。
:param output_shape: 指定输出的维度,一般直接按:[batch_size, x.get_shape().as_list()[1]*strides, x.get_shape().as_list()[2]*strides, out_channel]
:param strides:[1, d_h, d_w, 1]步长。(这个参数非常重要)
‘’’
反卷积在tensorflow中的实现以及推导:
现有kernel:3x3 称为kernel
Input:4x4 称为矩阵A
Stides:1
Output:2x2
参数在正向卷积时候有如下:
Kernel为3x3矩阵,其将对A4x4的矩阵进行卷积,可将kernel转化为如下4x16的矩阵:
再将A转化为16x1的矩阵,则输出为:
Y = kernel * A
得到的Y为4x1的向量,再转化为2x2的矩阵即为我们的输出
而反卷积就是从output4x1 input16x1即将4x1向量变为16x1,此时需要一个
A = kernel_ * Y
Kernel_必须是16x4维的而kernel_ = transpose(kernel)
故而转置卷积由此而来。
Tensorflow实现时候直接将正向卷积的kernel矩阵进行转置然后进行反卷积。