如何设计keras神经网络用2类训练预测2(+1而非A不是B)类数据

pdu*_*ois 4 r deep-learning keras

我有一个用于二进制图像分类的convnet模型:cat/dog.

library(keras)
conv_base <- application_vgg16(
  weights = "imagenet",
  include_top = FALSE,
  input_shape = c(150, 150, 3)
)

# Hyperparameter construction
model <- keras_model_sequential() %>% 
  conv_base %>%
  layer_flatten() %>% 
  layer_dense(units = 256, activation = "relu") %>% 
  layer_dense(units = 1, activation = "sigmoid")

model %>% compile(
  loss = "binary_crossentropy",
  optimizer = optimizer_rmsprop(lr = 2e-5),
  metrics = c("accuracy")
)


img <- image_load('test_image.jpg', target_size = c(150, 150))
x <- image_to_array(img)
x <- array_reshape(x, c(1, dim(x)))
preds_class <- model %>% predict_classes(x)
model %>% predict(x)
Run Code Online (Sandbox Code Playgroud)

predict(x)给出一个概率,它可以让我们推断它是一个猫或狗.

我只有训练数据两个类:猫/狗.有没有办法可以修改代码compile()或超参数构造,以便为它吐出3个概率

  1. non_catdog

第三类是不属于第1类和第2类的所有类(cat/dog)用于设计超参数或编译用于预测2(+1其他)类数据和2类训练的策略

Sam*_*Sam 6

我觉得你的问题可能在于构建网络:

# Hyperparameter construction
model <- keras_model_sequential() %>% 
  conv_base %>%
  layer_flatten() %>% 
  layer_dense(units = 256, activation = "relu") %>% 
  layer_dense(units = 1, activation = "sigmoid")
Run Code Online (Sandbox Code Playgroud)

最后一层使用sigmoid激活,将输出压缩到[0,1].我认为你所追求的是softmax激活,因为你有超过2个班级.

不完全确定keras语法,但可能有以下几点:

model <- keras_model_sequential() %>% 
      conv_base %>%
      layer_flatten() %>% 
      layer_dense(units = 256, activation = "relu") %>% 
      layer_dense(units = 3, activation = "softmax")
Run Code Online (Sandbox Code Playgroud)

如评论中所标记的那样 - 网络丢失功能也需要更改.二元熵方程仅假设预测和观察的单个向量,而在该架构中不是这种情况.

model %>% compile(
  loss = "categorical_crossentropy",
  optimizer = optimizer_rmsprop(lr = 2e-5),
  metrics = c("accuracy")
)
Run Code Online (Sandbox Code Playgroud)

更新

您正试图捕获3个可能的输出.属于A,B级或两者都不属于的可能性.您的标签矢量应如下所示:

Class A = [1, 0, 0] 
Class B = [0, 1, 0] 
Class C (! A || B) = [0, 0, 1] 
Run Code Online (Sandbox Code Playgroud)

分配C类似乎是合乎逻辑的,[0, 0]但这有问题,给出了'softmax'的工作原理.每个训练案例都有可能属于每个类别.因此,A类的训练示例可以被赋予30%的属于B类的概率.类预测基本上是投票.

即我预测此示例属于A类,因为它与其他类概率相比具有最高概率.