当我想获取剪刀石头布的图片时,我遇到问题,我希望输出的图片与图片相同。我尝试获取矩阵,例如纸的[1,0,0],岩石的[0,1,0]和剪刀的[0,0,1],但是在代码的最后,它给出了一个错误。
import numpy as np
from google.colab import files
from keras.preprocessing import image
import matplotlib.pyplot as plt
import matplotlib.image as mpimage
%matplotlib inline
uploaded = files.upload()
for i in uploaded.keys():
path = i
img = image.load_img(path, target_size = (150,150))
imgplot = plt.imshow(img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis = 0)
images = np.vstack([x])
classes = model.predict(images, batch_size = 24)
print(i)
print(classes)
if classes == [1,0,0]:
print('paper')
elif classes == [0,1,0]:
print('rock')
else:
print('scissors')
和错误的
Saving 1i1dlQrE6JnhYXE4.png to 1i1dlQrE6JnhYXE4 (1).png
1i1dlQrE6JnhYXE4.png
[[0. 0. 1.]]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-424-20a0d9bb67f4> in <module>()
18 print(i)
19 print(classes)
---> 20 if classes == [1,0,0]:
21 print('paper')
22 elif classes == [0,1,0]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我该如何修复代码?结果是纸=纸,石头=石头,剪刀=剪刀
答案 0 :(得分:0)
一种方法是使用-
classes == [[1., 0., 0.]]
但这并不总是有效,实际上,它仅在非常有限的情况下有效。因此,您可以使用这段代码从列表中提取最大值-
max_index = classes[0].index(max(classes[0]))
然后像这样比较max_index
-
if max_index == 0:
print("rock")
elif max_index == 1:
print("paper")
else:
print("scissor")
还要注意,这是一个很小的示例空间,因此我对print()
进行了硬编码,但是理想情况下,您希望有一个查找表,并且也可以轻松地做到这一点。
答案 1 :(得分:0)
我已经解决了这个问题,我用剪刀石头布的数组制作了列表,就像这样[1.,0.,0.]等,从该数组中我使用语句列表将数组更改为列表,然后调用列表以提供输出。