python - R中python keras和keras之间的不同精度

标签 python r keras

我通过 keras 在 R 中为 R 构建图像分类模型。

获得了大约 98% 的准确率,而在 python 中获得了可怕的准确率。

R 的 Keras 版本是 2.1.3,python 是 2.1.5

R模型代码如下:

model=keras_model_sequential()
model=model %>% 
  layer_conv_2d(filters = 32,kernel_size = c(3,3),padding = 'same',input_shape = c(187,256,3),activation = 'elu')%>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_dropout(.25) %>% layer_batch_normalization() %>%
  layer_conv_2d(filters = 64,kernel_size = c(3,3),padding = 'same',activation = 'relu') %>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_dropout(.25) %>% layer_batch_normalization() %>% layer_flatten() %>%
  layer_dense(128,activation = 'relu') %>%
  layer_dropout(.25)%>%
  layer_batch_normalization() %>%
  layer_dense(6,activation = 'softmax')


model %>%compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  metrics='accuracy'
)

我尝试使用相同的输入数据在 python 中重建相同的模型。

同时,得到了完全不同的表现。准确率甚至不到30%

因为 R keras 正在调用 python 来运行 keras。使用相同的模型架构,它们应该获得相似的性能。

我想知道这个问题是否是由预处理引起的,但仍然显示我的 python 代码:

model=Sequential()
model.add(Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(187,256,3),padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(Conv2D(64, (3, 3), activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(Dense(len(label[1]), activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

这是一个简单的分类。我只是按照大多数指令做同样的事情。

找不到其他人面临同样的问题。所以想请教一下是怎么回事,怎么解决。谢谢

最佳答案

这是一个巨大的差异,所以可能代码中存在错误或数据中存在意外情况,但在 Python 中从 R 重现 Keras 结果> 比看起来更难,因为在 R 端设置种子是不够的。您应该使用 use_session_with_seed 而不是 set.seed,它随 tensorflowkeras 的 R 库一起提供。请注意,为了完全再现,您需要use_session_with_seed(..., disable_gpu=TRUE, disable_parallel_cpu=TRUE)。另见 stacktf文档。另外,这是一个 example使用 github 版本的 kerasformula 和一个公共(public)数据集。此外,请注意像 layer_dropout 这样接受 seed 作为参数的函数。

关于python - R中python keras和keras之间的不同精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49890866/

相关文章:

python - 如何执行python cgi脚本?

R ggplot2 : draw segment between points

r - 在 R 中绘制来自 tapply 输出的数据

python - CuDNNLSTM(而不是 LSTM)层的意外结果

python - 如何将对象属性作为函数参数传递给 lambda 函数?

python - 我如何在工作流模板 Spark 作业中传递参数

r - 如何使函数跳过向量中的参数

python - Keras PREDICTION 抛出 'TypeError: ufunc ' add' 不包含签名匹配类型 dtype ('<U4' ) dtype ('<U4' ) dtype ('<U4' )' 的循环

keras:在模型中加载保存的模型权重以进行评估

python - 如何仅对分组的列进行分组和加法