微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 中的 flow_images_from_dataframe 函数

如何解决R 中的 flow_images_from_dataframe 函数

我将图像放在 2 个单独的文件夹中(训练和测试,没有验证,因为我的图像很少(406)并且吸引力评级(标签)是数据框 CFDNEW_all_males 中的一列。同样在 CFDNEW_all_males(数据框)中,我有模型的文件名 ID,它(几乎)与每张图片名称相同。所以阅读 Francois Chollet 和 JJ Allaire 的 Deep learning with R 他们使用 flow_images_from_directory 函数。但是对于我的情况,我发现我不能使用因为标签存储在数据帧中并且应该使用 flow_images_from_dataframe 函数设置 class_mode = "other" 而不是 binary 因为问题的回归类型。所以当我尝试运行该函数时,我收到此错误

Pandas(python 模块)必须与 Keras 安装在相同的环境中。使用 reticulate::virtualenv_install("pandas",envname = "r-tensorflow") 或 reticulate::conda_install("pandas",envname = “r-tensorflow”)取决于您使用的环境类型。

代码

setwd('/Users/e-mashine/Desktop')
train_image_files_path <- "/Users/e-mashine/Desktop/resized cfd images/training re2"
test_image_files_path <- "/Users/e-mashine/Desktop/resized cfd images/testing re2"
train_files <- list.files(path = train_image_files_path,pattern = "*.jpg",full.names=FALSE)
test_files <- list.files(path = test_image_files_path,full.names=FALSE)
for (i in 1:305) {train_dataset$File_Name[i] <- train_files[i]}
for (i in 1:101) {test_dataset$File_Name[i] <- test_files[i]}
train_dataset <- train_dataset[order(train_dataset$File_Name),]
test_dataset <- test_dataset[order(test_dataset$File_Name),]
train_datagen <- image_data_generator(rescale = 1/255)    
test_datagen <- image_data_generator(rescale = 1/255)
train_generator <- flow_images_from_dataframe(dataframe = train_dataset,directory = train_image_files_path,x_col = list(train_dataset$File_Name),y_col = list(train_dataset$Attractive),generator = train_datagen,class_mode = "other",target_size = c(640,450),batch_size = 20,classes = list(train_dataset$Attractive))

flow_images_from_dataframe 中的错误(数据帧 = CFDNEW_all_males,目录 = train_image_files_path,: Pandas(python 模块)必须安装在与 Keras 相同的环境中。使用 reticulate::virtualenv_install("pandas",envname = "r- tensorflow") 取决于您使用的环境类型。

但是,我已经这样做了:(我使用的是 Windows,所以我指定了 conda)

reticulate::conda_install("pandas",envname = "r-tensorflow")

正在收集包元数据(current_repodata.json):...工作...完成 解决环境:...工作...完成

已安装所有请求的软件包。

最后我也这样做了(之前):

install.packages("reticulate")
library(reticulate)
install.packages("remotes")
remotes::install_github("rstudio/tensorflow")
library(tensorflow)
install_tensorflow(version = "2.5.0",method = "conda",envname = "r-reticulate")
library(tensorflow)
tf_config()

2021-07-10 14:30:29.462901:W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库“cudart64_110.dll”; dlerror: cudart64_110.dll 未找到 2021-07-10 14:30:29.464762: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] 如果您的机器上没有设置 GPU,请忽略上面的 cudart dlerror。 TensorFlow v2.5.0 () Python v3.7 (C:/Users/e-mashine/AppData/Local/r-miniconda/envs/r-reticulate/python.exe)

我也尝试过:

reticulate::virtualenv_install("pandas",envname = "r-tensorflow")

但是和上面一样的错误... 有什么帮助吗?

编辑:我使用了一个自定义函数,它工作正常,但是当我尝试查看其中一个生成器的输出时出现此错误

# custom function,this works..
flow_images_from_dataframe<-function (dataframe,directory=NULL,x_col="filename",y_col="class",generator = 
image_data_generator(),color_mode = "rgb",classes = NULL,batch_size = 32,shuffle = TRUE,seed = NULL,save_to_dir = NULL,save_prefix = "",save_format = 
"jpg",dtype="float32",subset = NULL,interpolation = "nearest",drop_duplicates=TRUE) 
{args <- list(dataframe=as.data.frame(dataframe),directory = 
normalizePath(directory),#directory = as.character(directory),x_col=x_col,y_col=y_col,target_size = as.integer(target_size),color_mode = color_mode,classes = classes,class_mode = class_mode,batch_size = as.integer(batch_size),shuffle = shuffle,#as_nullable_integer(seed),#save_to_dir = normalizePath(save_to_dir),save_prefix = save_prefix,save_format = 
           save_format,dtype=dtype,drop_duplicates=drop_duplicates)
 #if (keras_version() >= "2.1.2") 
 #  args$interpolation <- interpolation
 #if (keras_version() >= "2.1.5") 
 # args$subset <- subset
 #do.call(generator$flow_from_dataframe,args)
 }
environment(flow_images_from_dataframe) <- asNamespace('keras')
batch <- generator_next(train_generator,completed = NULL)
#Error: object is not iterable

str(batch)
#Error: object 'batch' not found

它应该是 num [20,1:640,1:450,1:3] 1 1 1 1 1 1 1 1 1 1 ... 以及 2 个的列表?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。