我正在使用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
没问题,使用numpy.float64
将int
更改为.item()
plt.xlabel(class_names[train_labels[i.item()]])
AttributeError: 'int' object has no attribute 'item'
首先是int
吗?
这是在带有Tensorflow 1.13.1的Python 3.7上运行的。
答案 0 :(得分:1)
该错误是由引起
train_labels = train_labels / 255.0
train_labels
是标签的ndarray。通过将其除以255,得到的ndarray包含浮点数。因此,使用浮点数作为class_names
的索引,导致出现第一个错误。
列表索引必须是整数或切片,而不是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()
答案 1 :(得分:0)
归一化(在这种情况下为255的除法)通常是对要素(而不是对标签)进行必要的操作,因为标签尝试使用One hot encoding。