1、
寫作本文受一下兩篇文章啓發:
http://baijiahao.baidu.com/s?id=1604877144040331406&wfr=spider&for=pc,介紹tensorflow的計算圖和計算節點、會話;
https://blog.csdn.net/missayaaa/article/details/80251823,講解了可視化一隻貓在VGG-19中各層的feature map的可視化。
其實主要思想就兩條:圖像經過卷積層/激活層/池化層的計算後會有圖像的feature map,就是計算值,第一條就是把每一層計算出來的feature map與對應的層名對應起來存到一個“層名—feature map”字典中(把feature map 值固定下來存儲爲np.array數組);第二步就是利用plt工具把每一層的feature map值顯示出來。
這裏面有幾個細節,首先是得到你想要的那個層的feature map,因爲tensorflow中的數據是“張量”,tensor,不是直接可以打印出來的,得先建立會話,把運算運行起來才能得到值,否則你得到的就只是節點的指針;建立會話後通過tensor.eval()方法獲取feature map的值,如果不能直接在桌面上顯示出來(比如在服務器上運行一般是沒法顯示圖片的,或者沒有權限,悲催的我就是。。)就需要把feature map的值存下來並拷貝到Windows電腦上做進一步的可視化工作,其實代碼和第二個鏈接中差不多。
如何把tensor轉換爲numpy.array? 可以通過sess.run(tensor)或tensor.eval()方法,具體參見:https://vimsky.com/article/3725.html
注意把裏面的type()函數去掉就顯示原數值啦~
2、讀取寫入HDF5文件:
import h5py #導入工具包
import numpy as np
#HDF5的寫入:
imgData = np.zeros((30,3,128,256))
f = h5py.File('HDF5_FILE.h5','w') #創建一個h5文件,文件指針是f
f['data'] = imgData #將數據寫入文件的主鍵data下面
f['labels'] = range(100) #將數據寫入文件的主鍵labels下面
f.close() #關閉文件
#HDF5的讀取:
f = h5py.File('HDF5_FILE.h5','r') #打開h5文件
f.keys() #可以查看所有的主鍵
a = f['data'][:] #取出主鍵爲data的所有的鍵值
f.close()
舉後面的例子主要是說使用 with ... as ...: 語法可以自動管理文件的空間釋放,以免忘了使用f.close()關閉文件:
或者:
# -*- coding: utf-8 -*-
import h5py # 導入工具包
import numpy as np
# HDF5的寫入:
imgData = np.zeros((30, 3))
with h5py.File('HDF5_FILE.h5', 'w') as f:
f['data'] = imgData # 將數據寫入文件的主鍵data下面
f['labels'] = range(100) # 將數據寫入文件的主鍵labels下面
# f.close() # 關閉文件
print '*.h5 Created.
或者:
# -*- coding: utf-8 -*-
import h5py # 導入工具包
import numpy as np
# HDF5的寫入:
imgData = np.zeros((30, 3))
with h5py.File('HDF5_FILE.h5', 'w') as f:
f.create_dataset('data', data=imgData)
f.create_dataset('labels', data=range(100))
# f.close() # 關閉文件
讀取文件:
# -*- coding: utf-8 -*-
import h5py # 導入工具包
import numpy as np
# HDF5的讀取:
with h5py.File('HDF5_FILE.h5', 'r') as f:
for item in f.keys():
print 'main key is: {}'.format(item)
content = f[item][:]
print 'key value of {0} is: {1}'.format(item,content)
# f.close()
3、GAN網絡的插值方法:
總體思想是如果可以通過噪聲z1經過G生成G(z1),噪聲z2經過G可以生成G(z2),那麼如果把z1、z2分別同樣等分,如果一點一點用z1的部分替換z2的部分看看生成的東西會怎麼變?目的主要是看網絡是“死記硬背”還是學到了真實數據的分佈。
詳見:https://blog.csdn.net/qq_27261889/article/details/86477447