代码之家  ›  专栏  ›  技术社区  ›  amatof

predict_classes()在R中已弃用,应该使用什么?

  •  0
  • amatof  · 技术社区  · 2 年前

    我在RStudio中创建了一个CNN,使用keras来预测MNIST数字。我现在正试图使用以下代码来预测这个模型

    cnn_pred <- cnn_model %>%
        predict_classes(x_test)
    

    但是predict_classes()已经被弃用,我需要一些东西来替换它。我试过只使用predict(),但当我需要它来预测数字(0、1、2、3、4、5、6、7、8或9)时,它会产生连续的预测。

    什么函数可以与CNN模型一起使用来给出分类预测?

    1 回复  |  直到 2 年前
        1
  •  1
  •   OliverHennhoefer    2 年前

    这是一种复杂的方式,但我设法使它发挥了作用。我首先必须从tf对象中获取数组,结果是一个python数组,所以必须将其转换为R对象。然后我可以将它与另一个r对象进行比较/计算。

    这是对测试数据的预测,输出( prednn.tf )是张量:

    prednn.tf <- modelnn %>% predict(x_test) %>% k_argmax() 
    

    现在使用np_array将张量转换为数组:

    prednn.array <- np_array(prednn.tf)
    

    现在转到r-对象:

    prednn.array <- reticulate::py_to_r(prednn.array) 
    

    现在将预测值与实际值进行比较,并计算精度:

    accuracy(prednn.array, g_test) 
    

    笔记 -以下是精度函数:

    accuracy <- function(pred, truth)
      mean(drop(pred) == drop(truth))
    

    这一切都是因为 predict_classes() 已弃用。也许有一种更简单的方法,但这对我来说很有效。

        2
  •  0
  •   Mohamed Desouky    2 年前

    您可以使用

    cnn_pred <- cnn_model %>%
        predict(x_test) %>% k_argmax()
    
    
    
        3
  •  0
  •   Ricardo Semião    2 年前

    在我的例子中,似乎有一个更简单的方法可以做到这一点:

    将精度函数更改为:

    accuracy <- function(pred, truth)
      mean(drop(pred) == drop(truth))
    

    收件人:

    accuracy <- function(pred, truth)
      mean(drop(as.numeric(pred)) == drop(truth))
    

    然后进行以下工作:

    modelnn %>% predict(x_test) %>% k_argmax() %>% accuracy(g_test)
    

    看来, as.numeric() 将获取张量并提取值。希望这能有所帮助!