(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