获取石头剪刀布

时间:2020-05-04 11:23:00

标签: python machine-learning

当我想获取剪刀石头布的图片时,我遇到问题,我希望输出的图片与图片相同。我尝试获取矩阵,例如纸的[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()

我该如何修复代码?结果是纸=纸,石头=石头,剪刀=剪刀

2 个答案:

答案 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.]等,从该数组中我使用语句列表将数组更改为列表,然后调用列表以提供输出。