2017-08-18 56 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)); 

希望有所帮助。