1. 程式人生 > >SAGAN程式除錯中遇到的一些問題總結

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