2017-04-06 6 views
0

pycaffeを使用して機能を上書きすると、機能が上書きされることがわかりました。次のように私のコードは次のとおりpycaffeを使用して抽出したときにフィーチャーが上書きされるのはなぜですか?

0.508398 
-0.176945 
-0.176945 

fts_2によって上書きさfts_1の値を意味する:

tImg_1 = misc.imread('1.jpg') 
tImg_1 = tImg_1[:,:,::-1] # color channel swap 
tImg_2 = misc.imread('2.jpg') 
tImg_2 = tImg_2[:,:,::-1] # color channel swap 

tImg_1 = (np.float32(tImg_1)- 127.5)/128 # mean substruction 
tImg_2 = (np.float32(tImg_2)- 127.5)/128 # mean substruction 

tI_1 = np.moveaxis(tImg_1, 0, 1) # Transpose 
tI_2 = np.moveaxis(tImg_2, 0, 1) # Transpose 

# Extract features 
tI_1 = np.reshape(tImg_1, (1, tImg_1.shape[2], tImg_1.shape[0], tImg_1.shape[1])) 
tI_2 = np.reshape(tImg_2, (1, tImg_2.shape[2], tImg_2.shape[0],  tImg_2.shape[1]))     

net.blobs['data'].data[...] = tI_1 
net.forward() 
fts_1 = net.blobs['fc5'].data 
print(fts_1[0, 0])     

net.blobs['data'].data[...] = tI_2 
net.forward() 
fts_2 = net.blobs['fc5'].data     

print(fts_2[0, 0])     
print(fts_1[0, 0]) 

が実行これは以下の出力を提供します。どうすればこの問題を回避できますか?

答えて

1

fts_1は、net.blobs['fc5'].dataを指しています。オブジェクトのディープコピーを作成する必要があります。あなたの最初の課題はfts_1 = copy.deepcopy(net.blobs['fc5'].data)

+0

ありがとうございます。これはPython固有の問題です。カフェとは何の関係もありません! – Hasnat

関連する問題