【问题标题】:how to if statement a model.predict array如何 if 声明一个 model.predict 数组
【发布时间】:2021-01-12 14:17:07
【问题描述】:

model.predict 输出是 [[1.0.0.]]、[[0.1.0.]]、[[0.0.1.]],具体取决于图像的类别。目前正在努力将类别名称作为输出而不是深蹲、卧推或硬拉,并想知道最好的方法。

model = load_model('imageModel.h5')
img_width, img_height = 150, 150
img = image.load_img('PATH', target_size=(img_width, img_height))
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
(model.predict(img))
print(model.predict(img))

我尝试使用 for 语句,但这会打印出所有 3 个类别,而不仅仅是图像所属的类别:

array = np.array(model.predict(img))
arr1 = [[1, 0, 0]]
arr2 = [[0, 1, 0]]
arr3 = [[0, 0, 1]]
for arr1 in array == True:
   print("bench")
for arr2 in array == True:
print("deadlift")
for arr3 in array == True:
print("squat")

任何帮助将不胜感激。

【问题讨论】:

  • for arr1 in array == True:for arr1 in (array == True): 相同,其中array == True 也是一个数组。这是你打算写的吗?

标签: python numpy tensorflow keras


【解决方案1】:

您可以使用 argmax 查找它所属的类的索引,然后从该索引中读取类名。即使预测是概率而不是二元的,这也会起作用。

class_names = ['bench', 'deadlift', 'squat']
pred = model.predict(img)
pred_class = class_names[np.argmax(pred)]

【讨论】:

    【解决方案2】:

    我想你打算做什么:

    arr1 = np.array([1, 0, 0])
    arr2 =  np.array([0, 1, 0])
    arr3 =  np.array([0, 0, 1])
    
    if arr1[0] == array[0]:
       print("bench")
    if arr2[1] == array[1]:
        print("deadlift")
    if arr3[2] == array[2]:
        print("squat")
    

    使用简单的 for 循环:

    class_names = ['bench', 'deadlift', 'squat']
    for each in range(len(array)):
        if array[each] == 1:
           print(class_names[each])
           break
        
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2010-12-21
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多