Почему tf.image.ssim всегда возвращает AttributeError: объект 'numpy.ndarray' не имеет атрибута 'get_shape'

Я пытаюсь использовать tf.image.ssim, чтобы получить сходство между двумя изображениями, однако он возвращает ошибку атрибута. Поскольку я просто напрямую использую код TensorFlow, я не вижу способа отладить эту проблему.

import tensorflow as tf
from sklearn import datasets
import matplotlib.pyplot as plt
iris = datasets.load_iris()
x_train, y= tf.keras.datasets.mnist.load_data(
    path='mnist.npz'
)

tf.image.ssim(
    x_train[0][0], x_train[0][0], 255
)
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
0
422
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

MNIST возвращает изображение в градациях серого в 2D, SSIM требует, чтобы изображение было в 3D. Так что просто расширьте размеры возвращенного изображения, которое вы хотите сравнить, и примените к нему SSIM.

import numpy as np

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(
    path='mnist.npz'
)

x_train_expanded = np.expand_dims(x_train[0], axis=2)
print(tf.image.ssim(x_train_expanded, x_train_expanded, 255))

Он возвращает следующее:

tf.Tensor(1.0, shape=(), dtype=float32)

Возвращенный тензор содержит значение MS-SSIM для каждого изображения в пакете. Значения находятся в диапазоне [0, 1], и пример возвращает значение 1, указывающее, что оба изображения идентичны.

Когда вы печатаете print(x_train[0].shape) что вы получаете?

yudhiesh 12.12.2020 04:34

(60000, 28, 28)

desert_ranger 12.12.2020 04:35

Спасибо, но все равно не запускается. Я попробовал ваш ответ дословно на двух разных компьютерах. Единственное изменение, которое я сделал в начале, это добавление импорта тензорного потока как tf.

desert_ranger 12.12.2020 04:42

Привет, я снова обновил ответ. Это связано с тем, что данные MNIST отображаются в оттенках серого.

yudhiesh 12.12.2020 04:49

Если это ответит на вопрос, пожалуйста, примите мой ответ.

yudhiesh 12.12.2020 04:59

Я ценю вашу помощь, но теперь я получаю следующую ошибку: AttributeError: объект 'numpy.ndarray' не имеет атрибута 'get_shape'

desert_ranger 12.12.2020 05:02

Может быть, вы импортировали библиотеку, которой у меня нет? Вот почему он работает на вашем компьютере, но не на моем.

desert_ranger 12.12.2020 05:02

Я знал, что мне нужно импортировать numpy :) Моя версия tf 2.2.0

desert_ranger 12.12.2020 05:08

Это должно работать, и я обновил ответ выводом.

yudhiesh 12.12.2020 05:13

Не могли бы вы рассказать мне свою версию tensorflow?

desert_ranger 12.12.2020 05:15

2.3.0 все равно должно работать. Вы действительно импортировали набор данных и установили возвращаемые значения так же, как я, и распечатали значение?

yudhiesh 12.12.2020 05:34

Юп, я так и сделал :(

desert_ranger 12.12.2020 06:21

Давайте продолжим обсуждение в чате.

yudhiesh 12.12.2020 06:51

Другие вопросы по теме