简体   繁体   English

Keras R中图像分类模型中的形状误差

[英]Shape error in image classification model in Keras R

I am having trouble with one area of code and it prevents me from finishing my research paper. 我在一个代码领域遇到麻烦,这使我无法完成研究论文。 I am new to Machine Learning and R, but I have learned a lot so far. 我是机器学习和R的新手,但到目前为止我学到了很多东西。 Here is my code: 这是我的代码:

    # Install packages and libraries 
    install.packages("keras")
    source("http://bioconductor.org/biocLite.R")
    library(keras)
    library(EBImage)

    # Read images 
    setwd('C:/Users/ebarn/Desktop/DataSet')
    pics <- c('p1.jpg', 'p2.jpg', 'p3.jpg', 'p4.jpg', 'p5.jpg',   
    'p6.jpg','c1.jpg', 'c2.jpg', 'c3.jpg', 'c4.jpg', 'c5.jpg',  
    'c6.jpg')

    mypic <- list()
    for (i in 1:12) {mypic[[i]] <- readImage(pics[i])}

    # Explore 
    print(mypic[[1]])
    display(mypic[[1]])
    display(mypic[[8]])
    summary(mypic[[1]])
    hist(mypic[[12]])
    str(mypic)

    # Resize 
    for (i in 1:12) {mypic[[i]] <- resize(mypic[[i]], 28, 28)}
    str(mypic)

    # Reshape
    28*28*3
    for (i in 1:12) {mypic[[i]] <- array_reshape(mypic[[i]], c(28,   
    28, 3))} 
    str(mypic)

    # Row Bind 
    trainx <- NULL 
    for(i in 1:5) {trainx <- rbind(trainx, mypic[[i]])}
    str(trainx)

    for(i in 7:11) {trainx <- rbind(trainx, mypic[[i]])}
    str(trainx)

    testx <- rbind(mypic[[6]], mypic[[12]])
    trainy <- c(0,0,0,0,0,1,1,1,1,1)
    testy <- c(0, 1)

    # One Hot Encoding 
    trainLabels <- to_categorical(trainy)
    testLabels <- to_categorical(testy)
    trainLabels

    # Model 
    model <- keras_model_sequential()
    model %>%
    layer_dense(units = 256, activation = 'relu', input_shape = 
    c(2352))
    %>%
    layer_dense(units = 128, activation = 'relu') 
    %>% 
    layer_dense(units = 2, activation = 'softmax')

    summary(model)

    # Compile 
    model %>% 
    compile(loss = 'sparse_categorical_crossentropy',
          optimizer = optimizer_rmsprop(),
          metrics = c('accuracy'))

   # model.add(Dense(10, activation = 'softmax'))

   # Fit Model 
   history <- model %>% 
   fit(trainx, trainLabels, epochs = 30, batch_size = 32,    
   validation_split = 0.2)

    plot(history)

    # Evaluation & Prediction - train data
    model %>% evaluate(trainx, trainLabels)

The Fit Model method will not print out my graph. 拟合模型方法不会打印出我的图形。 Here is the error it gives me: 这是给我的错误:

ValueError: Error when checking target: expected dense _1 to have shape (1,) but got array with shape (2,)

You are one-hot encoding the labels: 您正在对标签进行热编码:

# One Hot Encoding 
trainLabels <- to_categorical(trainy)
testLabels <- to_categorical(testy)

Therefore, they are no longer sparse labels and you need to use categorical_crossentropy as the loss function instead of sparse_categorical_crossentropy . 因此,它们不再是稀疏标签,您需要使用categorical_crossentropy作为损失函数,而不是sparse_categorical_crossentropy Alternatively, you can comment the one-hot encoding lines. 或者,您可以注释一键编码行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM