Проблема Tensorflow с преобразованием типа numpy.float64 в int - PullRequest
1 голос
/ 10 мая 2019

Я создаю очень простой ИИ с Tensorflow и использую код из официального документа / учебника.Вот мой полный код:

from __future__ import absolute_import, division, print_function
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

train_images = train_images / 255.0
train_labels = train_labels / 255.0

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()

Проблема в этой строке:

plt.xlabel(class_names[train_labels[i]])
TypeError: list indices must be integers or slices, not numpy.float64

Нет проблем, измените numpy.float64 на int, используя .item()

plt.xlabel(class_names[train_labels[i.item()]])
AttributeError: 'int' object has no attribute 'item'

Был ли это int во-первых?

Это работает на Python 3.7 с Tensorflow 1.13.1.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Ошибка вызвана тем, что

train_labels = train_labels / 255.0

train_labels является меткой.Разделив его на 255, полученный ndarray содержит числа с плавающей запятой.Поэтому в качестве индекса для class_names используется плавающее число, приводящее к первой ошибке.

индексы списка должны быть целыми числами или слайсами, а не numpy.float64

Toпреобразовать массив numy x в int, вот путь: x.astype(int).Но в этом случае при этом будет создан массив со всеми значениями, равными 0.

Исправлено удаление строки, указанной выше:

from __future__ import absolute_import, division, print_function
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

train_images = train_images / 255.0
# train_labels = train_labels / 255.0

plt.figure(figsize=(10,10))
for i in range(25):
    print(train_labels[i], train_images.shape, train_labels.shape, type(train_labels))
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()
0 голосов
/ 10 мая 2019

Нормализация (в данном случае деление на 255) - это то, что обычно необходимо делать с функциями, а не с метками, для меток попробуйте использовать Одно горячее кодирование .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...