2017-08-18 57 views
0

我是新來tensorflow,所以基本的疑惑負荷:-)Tensorflow-Java圖像比較

我有兩個相同的圖像(狗),我編輯的一個(即我切一小片的狗,請現在我已經爲這兩個圖像創建了張量,當我打印張量時它具有相同的值,它不應該是兩個不同的值嗎?我將如何分辨這兩幅圖像之間的差異?我想測量這兩幅圖像之間的變化和變化。

Tensor:- 
[172, 293, 3, 1] 

Code:- 
    final Output input = b.constant("input", imgBytes); 
    output = b.expandDims(
        b.cast(b.decodeJpeg(input, 3), DataType.FLOAT), 
        b.constant("make_batch", 3)); 

    try (Session s = new Session(g)) { 
     t = s.runner().fetch(output.op().name()).run().get(0); 
    } 
    System.out.println("output1="+t.toString()); 

@pyb,感謝您的代碼格式。

+0

我使用4個空格縮進代碼,以便格式化。 – pyb

+0

您能否詳細說明您的意思是「它具有相同的價值」?你如何印出張量的價值?如在哪裏,字符串「[172,293,3,1]」從哪裏來? – ash

+0

用謝爾登庫珀的話說,我做了一個噓噓,所以編輯這個帖子時更加關聯性的問題 – Rrrrr

回答

1

Tensor.toString()不返回張量內容的值。它返回一個描述元數據的字符串 - 形狀和類型(參見鏈接的javadoc)。

我懷疑字符串[172, 293, 3, 1]是什麼Tensor.toString()actually prints的截尾形式,這將是類似FLOAT tensor with shape [172, 293, 3, 1]

如果是這樣,您會看到相同的字符串,因爲兩個圖像的尺寸都相同(它們是172x293x3像素的圖像)。

要看到張的內容,請參閱Tensor.writeToTensor.copyTo

例如:

float[][][] contents = t.copyTo(new float[172][293][3]); 
System.out.println(Arrays.toString(contents)); 

希望有所幫助。