如何解决深度神经网络分类问题 MNIST
嗨,我正在尝试开发一个能够读取手写数字的神经网络 我从网上复制了这个模型(参考:https://www.youtube.com/watch?v=5bso_5X7Zu4&t=643s) 我的问题来自新数据,错误分类率很高(见帖子末尾)
#Youtube link https://www.youtube.com/watch?v=5bso_5X7Zu4&t=785s
# MNIST data
library(keras)
mnist <- dataset_mnist()
trainx <- mnist$train$x
trainy <- mnist$train$y
testx <- mnist$test$x
testy <- mnist$test$y
# Plot images
par(mfrow = c(3,3))
for (i in 1:9) plot(as.raster(trainx[i,],max = 255))
par(mfrow= c(1,1))
# Five
a <- c(1,12,36,48,66,101,133,139,146)
par(mfrow = c(3,3))
for (i in a) plot(as.raster(trainx[i,1))
# Reshape & rescale
trainx <- array_reshape(trainx,c(nrow(trainx),784))
testx <- array_reshape(testx,c(nrow(testx),784))
trainx <- trainx / 255
testx <- testx /255
# One hot encoding
trainy <- to_categorical(trainy,10)
testy <- to_categorical(testy,10)
# Model
model <- keras_model_sequential()
model %>%
layer_dense(units = 512,activation = 'relu',input_shape = c(784)) %>%
layer_dropout(rate = 0.4) %>%
layer_dense(units= 256,activation = 'relu') %>%
layer_dropout(rate = 0.3) %>%
layer_dense(units = 10,activation = 'softmax')
# Compile
model %>%
compile(loss = 'categorical_crossentropy',optimizer = optimizer_rmsprop(),metrics = 'accuracy')
# Fit model
history <- model %>%
fit(trainx,trainy,epochs = 30,batch_size = 32,validation_split = 0.2)
# Evaluation and Prediction - Test data
model %>% evaluate(testx,testy)
pred <- model %>% predict_classes(testx)
table(Predicted = pred,Actual = mnist$test$y)
prob <- model %>% predict_proba(testx)
cbind(prob,Predicted_class = pred,Actual = mnist$test$y)[1:5,]
# New data
library(EBImage)
temp = list.files(pattern = "*.jpg")
mypic <- list()
for (i in 1:length(temp)) {mypic[[i]] <- readImage(temp[[i]])}
par(mfrow = c(4,4))
for (i in 1:length(temp)) plot(mypic[[i]])
for (i in 1:length(temp)) {colorMode(mypic[[i]]) <- Grayscale}
for (i in 1:length(temp)) {mypic[[i]] <- 1-mypic[[i]]}
for (i in 1:length(temp)) {mypic[[i]] <- resize(mypic[[i]],28,28)}
str(mypic)
par(mfrow = c(4,5))
for (i in 1:length(temp)) plot(mypic[[i]])
for (i in 1:length(temp)) {mypic[[i]] <- array_reshape(mypic[[i]],c(28,3))}
new <- NULL
for (i in 1:length(temp)) {new <- rbind(new,mypic[[i]])}
newx <- new[,1:784]
newy <- c(7,5,2,3,4,7,6,8,6)
# Prediction
pred <- model %>% predict_classes(newx)
pred
table(Predicted = pred,Actual = newy)
prob <- model %>% predict_proba(newx)
cbind(prob,Predicted = pred,Actual = newy)
我已经获得了下一个预测(您可以从here下载图像)
7 5 2 0 5 3 8 2 2 6 6 6 3 5 5
前六个数字分类正确(视频中的数字)(7 5 2 0 5 3)但接下来的 9 个(我写的数字)显示出非常糟糕的结果。 我还尝试用训练数据数字测试我的 nnet,但它继续失败,我不明白为什么 :(
有什么想法吗?为什么会发生这种情况? 谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。