我一直在尋找一種方式來顯示網絡後Caffe中的參數,我發現this link。它發送參數轉置如何可視化Caffe參數?
filters = net.params['conv1'][0].data
vis_square(filters.transpose(0, 2, 3, 1))
我不明白爲什麼它轉置數據?而在vis_square它使用此代碼:
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
這也太壓縮明白,任何解釋,將不勝感激。然後當我改變了代碼來獲得,而不是CONV2的CONV1:
filters = net.params['conv2'][0].data
vis_square(filters.transpose(0, 2, 3, 1))
我得到
TypeError: Invalid dimensions for image data
,有CONV1和CONV2之間有什麼不同造成這個錯誤?我們如何改變代碼來修復它,它適用於所有層?
一些調試數據:
net.params['conv1'][0].data.shape : (96, 3, 11, 11)
net.params['conv1'][1].data.shape : (96,)
net.params['conv2'][0].data.shape : (256, 48, 5, 5)
net.params['conv2'][1].data.shape : (256,)
net.params['conv3'][0].data.shape : (384, 256, 3, 3)
net.params['conv3'][1].data.shape : (384,)
for conv2:
data.shape[0] : 256
np.sqrt(data.shape[0]) : 16.0
np.ceil(np.sqrt(data.shape[0])) : 16.0
data.shape[0] : 256
data.shape[0:] : (256, 6, 6, 48)
data.shape[1] : 6
data.shape[1:] : (6, 6, 48)
data.ndim : 4
range(4, data.ndim + 1)) : [4]
tuple(range(4, data.ndim + 1)) : (4,)
後:
data = np.pad(data, padding, mode='constant', constant_values=1)
爲CONV 2:
data.shape : (10, 12, 10, 12, 3)
後
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
個
數據成爲:
data.shape : (120, 120, 3)