为什么基于Autoencoder的图像搜索无法获得正确的输出?

时间:2018-10-10 19:13:59

标签: machine-learning keras conv-neural-network knn autoencoder

我的自动编码器在重建图像时工作得很好-enter image description here

但是当我尝试使用相同的自动编码器进行图像搜索时,结果与查询不匹配。 enter image description here

图片搜索代码-

from sklearn.neighbors.unsupervised import NearestNeighbors
clf=NearestNeighbors(metric='euclidean')
img=encoded_imgs.reshape(encoded_imgs.shape[0], 49)

clf.fit(img)

def get_similar(image, n_neighbors=5):
  image=image.reshape(1,28,28,1)
  code=encoder.predict(image)
  code=code.reshape(1,49)

  distances, idx=clf.kneighbors(code,n_neighbors=n_neighbors)



  return distances, X_train[idx]

def show_similar(image):
  distances, neighbors=get_similar(image, n_neighbors=5)
  neighbors=neighbors.reshape(5,28,28)

  n=10
  plt.figure(figsize=(20,4))
  for i in range(5):

    ax = plt.subplot(2, n, i + 1 + n)
    plt.imshow(neighbors[i])
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
  plt.show()




show_similar(X_test[247])#number -4
show_similar(X_test[56])#number -4
show_similar(X_test[63])#number -3

其他有用信息-

编码器的输出为(None,7,7,1)

解码器的输出为(None,28,28,1)

在前两种情况下,它正在检索除4外的所有数字。关于如何解决此问题的任何建议?

0 个答案:

没有答案