Python 将numpy.float64类型转换为int的Tensorflow问题

Python 将numpy.float64类型转换为int的Tensorflow问题,python,numpy,tensorflow,artificial-intelligence,Python,Numpy,Tensorflow,Artificial Intelligence,我正在用Tensorflow创建一个非常基本的AI,并使用官方文档/教程中的代码。以下是我的完整代码: 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 (t

我正在用Tensorflow创建一个非常基本的AI,并使用官方文档/教程中的代码。以下是我的完整代码:

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
没问题,使用
.item()

一开始它是一个
int


这是在Python 3.7和Tensorflow 1.13.1上运行的。

错误是由

train_labels = train_labels / 255.0
列车标签
是一组标签。通过将其除以255,得到的ndarray包含浮点数。因此,一个浮点数被用作导致第一个错误的
类名的索引

列表索引必须是整数或片,而不是numpy.float64

要将numpy数组
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()
规范化(在本例中为255除法)通常是标签尝试使用的功能所必需的,而不是标签

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()