SAGAN程序调试中遇到的一些问题总结

(1)运行程序过程中出现了interrupted by signal6:SIGABRT 的错误,并提示无法找到CUDNN的句柄

     解决方法:在指定的GPU上面运行程序

                        import os

                        os.environ["CUDA_VISIBLE_DEVICES"]="3"

(2)SAGAN 是如何实现将一个1×1×128维的噪声转变成图像的

     在输入端通过tf.nn.conv2d_transpose函数输出4×4大小的feature(transpose函数有一个参数out_shape可以指定输出feature的宽度和高度),然后就可以采用正常的图像卷积方式进行逐步upsample-conv的形式得到指定大小的输出图像

(3)SAGAN中的attention layer

f = conv(x, ch // 8, kernel=1, stride=1, sn=sn, scope='f_conv')
g = conv(x, ch // 8, kernel=1, stride=1, sn=sn, scope='g_conv')
h = conv(x, ch, kernel=1, stride=1, sn=sn, scope='h_conv')

这里的f和g 用来计算attention map,输出的feature 个数 遵从原文中的Wg(c/8*c)

计算attention map: f进行转置后与g进行内积计算

s = tf.matmul(hw_flatten(g), hw_flatten(f), transpose_b=True)

hw_flatten(g):将二维feature展开成一维向量

tf.reshape(x, shape=[x.shape[0], -1, x.shape[-1]])将原本的feature维度由[32,16,16,32]reshape成为[32,256,32]

注意这里reshape的参数shape必须是一个确定的值,x.shape[0]或者x.shape[-1]的取值不能是None

hw_flatten(f):同上

将二维feature展开成一维之后,就可以进行矩阵的内积运算了

内积运算的结果经过softmax进行归一化处理,与h进行内积运算,然后再次reshape成为[32,16,16,256]self-attention maps

(4)SAGAN中的SN操作

https://blog.csdn.net/a312863063/article/details/83552068

猜你喜欢

转载自blog.csdn.net/Future_Engineer/article/details/84561086
今日推荐