Ошибка формы в модели классификации изображений в Keras R - PullRequest
0 голосов
/ 14 декабря 2018

У меня проблемы с одной областью кода, и это мешает мне закончить мою исследовательскую работу.Я новичок в машинном обучении и R, но я многому научился.Вот мой код:

    # 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)

Метод Fit Model не распечатывает мой график.Вот ошибка, которую он мне дает:

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

1 Ответ

0 голосов
/ 15 декабря 2018

Вы горячо кодируете метки:

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

Поэтому они больше не являются разреженными метками, и вам нужно использовать categorical_crossentropy в качестве функции потерь вместо sparse_categorical_crossentropy.Кроме того, вы можете прокомментировать горячие строки кодирования.

...