【发布时间】:2021-03-24 01:33:24
【问题描述】:
我一直在玩 CNN,在 R (RstudiO) 中使用 Keras/tensorflow,并且能够构建一些分类模型(使用狗/猫数据集)。然后我觉得有必要尝试为它创建一个前端,并决定尝试一下 Shiny。
幸运的是,我阅读了一些关于它的内容,创建了一个可行的本地运行应用程序(确实非常容易!)。下一步自然是……将其发布到 shinyapps.io。这就是问题出现的地方。下面的代码在本地完美运行,但是当我发布 shinyapps.io 时,部署会产生以下消息(在代码之后)。 看起来,阅读错误消息,它与 Keras 和 Tensorflow 有关,但我不知道它是什么。
简单来说就是:加载图片>>加载预先保存的keras模型>>使用模型猜测是猫还是狗
谢谢!
# Attach Packages
require(tensorflow)
library(shiny)
library(keras)
library(tidyverse)
# Load the model
model <- load_model_hdf5("dog_cat_class_model.h5")
# Define the UI
ui <- fluidPage(
# App title ----
titlePanel("Hello dear user"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: File upload
fileInput("image_path", label = "Input a JPEG image")
),
# Main panel for displaying outputs ----
mainPanel(
# Output: Histogram ----
textOutput(outputId = "prediction"),
plotOutput(outputId = "image")
)
)
)
# Define server logic required to draw a histogram ----
server <- function(input, output) {
# ------------------ App virtualenv setup (Do not edit) ------------------- #
image <- reactive({
req(input$image_path)
jpeg::readJPEG(input$image_path$datapath)
})
output$prediction <- renderText({
image_new <- req(input$image_path$datapath)%>%
image_load(.,target_size = c(150, 150))
image_new_array <- image_to_array(image_new)
ready_array <- array_reshape(image_new_array, c(1, 150, 150, 3))
image_new_gen <- image_data_generator(rescale = 1/255)
image_new_generator = flow_images_from_data(
ready_array,
generator = image_new_gen,
batch_size = 1)
preds <- predict_generator(model,
image_new_generator,
step=1,
verbose=1)%>%
as_tibble(.name_repair="unique")%>%
rename(Prob_Dog=1)%>%
mutate(Prob_Dog=(Prob_Dog*100))
pred_prob<-round(preds$Prob_Dog,1)
paste0("The predicted prob of being a dog is ", pred_prob,"%" )
})
output$image <- renderPlot({
plot(as.raster(image()))
})
}
shinyApp(ui, server)
网络链接错误信息:
Loading required package: tensorflow
Error: package or namespace load failed for ‘tensorflow’:
.onLoad failed in loadNamespace() for 'tensorflow', details:
call: py_module_import(module, convert = convert)
error: ImportError: No module named tools
Detailed traceback:
File "/opt/R/4.0.3/lib/R/library/reticulate/python/rpytools/loader.py", line 24, in _import_hook
level=level
File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 101, in <module>
from tensorflow_core import *
File "/opt/R/4.0.3/lib/R/library/reticulate/python/rpytools/loader.py", line 24, in _import_hook
level=level
File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/__init__.py", line 40, in <module>
from tensorflow.python.tools import module_util as _module_util
File "/opt/R/4.0.3/lib/R/library/reticulate/python/rpytools/loader.py", line 24, in _import_hook
level=level
Error in value[[3L]](cond) :
package or namespace load failed for ‘keras’:
.onLoad failed in loadNamespace() for 'tensorflow', details:
call: py_module_import(module, convert = convert)
error: ImportError: cannot import name _argument_parser
Detailed traceback:
File "/opt/R/4.0.3/lib/R/library/reticulate/python/rpytools/loader.py", line 24, in _import_hook
level=level
File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 101, in <module>
from tensorflow_core import *
File "/opt/R/4.0.3/lib/R/library/reticulate/python/rpytools/loader.py", line 24, in _import_hook
level=level
File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/__init__.py", line 42, in <module>
from . _api.v2 import audio
File "/opt/R/4.0.3/lib/R/library/reticulate/python/rpytools/loader.py", line 24, in _import_hook
level=level
File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/_api/v2/audio/__init__.py", line 10, in <module>
from tensorflow.python.ops.
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
【问题讨论】:
-
您可能需要这个:RETICULATE_PYTHON 环境变量,因此 rsconnect 可以检测重现本地环境所需的 python 包。 tensorflow.rstudio.com/deploy/shiny
-
谢谢@cory。如您所述,重新安装所有内容并创建 Rprofile。仍然在应用程序的网页中得到这个:
Loading required package: reticulate Error in value[[3L]](cond) : The h5py Python package is required to save and load models Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous> Execution halted在 Rprofile 我有这个:Sys.setenv("/home/shiny/.virtualenvs/python_pedro/bin/python")
标签: r tensorflow keras shiny shiny-server