2

我们的研究部门创建了一个闪亮的应用程序,允许用户根据选定的标准获取事件的概率。它基于在脚本开头使用 nnet 库创建的神经网络。我已经设置了一个基本的 Shiny Server 来托管应用程序以使用 CentOS 进行生产使用。开发人员在 Windows 工作站上使用 RStudio 进行开发。

我们发现,当研究人员将他们的 app.R 脚本和支持 CSV 文件复制到 CentOS 机器中,并在浏览器中查看应用程序时,应用程序返回的结果与他们在开发工作站上看到的结果大不相同。该应用程序在两种环境下都能正常运行,但概率不同!

在调试时,我在两个盒子上比较了 RStudio 中生成的 nnet。每个操作系统的权重和残差都有显着差异。种子是相同的,因为脚本不会从一个操作系统更改到另一个操作系统。

我们已经审查并匹配了安装在所有盒子上的 R 版本 - R 3.5.1 ( EDIT - 3.6.0)。我们还确保应用程序中使用的所有库都处于完全相同的版本。

我们尝试将编码参数添加到我们使用的 read.csv() 调用中,适用于 Windows-1252 和 UTF-8,以确保它不是编码问题。

我们已经降低了 CSV 源文件中值的精度,因为这些值本身是 16 位精度,并且我们不知道是否存在一些可能的截断或舍入可能存在浮点问题参与。

model.data <- read.csv('model.data.csv')

set.seed(110)
cut <- sample(2, nrow(model.data), replace = TRUE, prob = c(.90, .10))
train <- model.data[cut == 1,]
test <- model.data[cut == 2,]

train.x <- train[,-12]
train.y <- train[,12]
test.x <- test[,-12]
test.y <- test[,12]

nn.wp <- nnet(train.x, train.y,
               decay = .10,
               size = 4,
               skip = 1)

来自 CSV 的样本数据(约 55000 行):

"TLG","TLG.log","OffLeadBefore","S.Transform","D.x","TG.x","DEZ","OTTO","DeDTTO","eff.time","ADV","OTW"  
3600,8.1886891244442,0,0,1,10,75,3,3,0,1.36193576224564,1
3133,8.04974629095219,-3,-0.0535970710596484,1,10,90,2,3,0,-1.36193576224564,0  
3109,8.04205641005875,-3,-0.0538035452921865,1,10,63,2,3,0,-1.36193576224564,0

预期结果是生成的 nnet 模型应该在两个操作系统上匹配,因此应用程序本身会产生正确的概率。

编辑 我们还验证了相同的种子在两个盒子上也返回了相同的值。

4

0 回答 0