python - 相同的 NN 架构在张量流和 keras 中提供不同的精度
问题描述
使用 [4, 4] 隐藏层在 iris 数据集上训练并在 tensorflow 和 keras 中分别创建的神经网络给出了不同的结果。
虽然 tensorflow 模型在测试中给出了 96.6% 的准确率,但 keras 模型只给出了大约 50% 的准确率。在这两种情况下,学习率、优化器、小批量大小等各种超参数都是相同的。
凯拉斯模型
model = Sequential()
model.add(Dense(units = 4, activation = 'relu', input_dim = 4))
model.add(Dropout(0.25))
model.add(Dense(units = 4, activation = 'relu'))
model.add(Dropout(0.25))
model.add(Dense(units = 3, activation = 'softmax'))
adam = Adam(epsilon = 10**(-6), lr = 0.01)
model.compile(optimizer = 'adagrad', loss = 'categorical_crossentropy', metrics = ['accuracy'])
one_hot_labels = keras.utils.to_categorical(y_train, num_classes = 3)
model.fit(X_train, one_hot_labels, epochs = 50, batch_size = 40)
张量流模型
feature_columns = [tf.feature_column.numeric_column(key = name,
shape = (1),
dtype = tf.float32) for name in list(X_train.columns)]
classifier = tf.estimator.DNNClassifier(hidden_units = [4, 4],
feature_columns = feature_columns,
n_classes = 3,
dropout = 0.25,
model_dir = './DNN_model')
train_input_fn = tf.estimator.inputs.pandas_input_fn(x = X_train,
y = y_train,
batch_size = 40,
num_epochs = 50,
shuffle = False)
classifier.train(input_fn = train_input_fn, steps = None)
对于 keras 模型,我确实尝试过改变学习率、增加 epoch 的数量、使用不同的优化器等。因此,准确性仍然很差。显然,这两个模型都在做不同的事情,但从表面上看,它们在所有关键方面似乎都与我相同。
任何帮助表示赞赏。
解决方案
它们具有相同的架构,仅此而已。
性能差异来自以下一个或多个因素:
你有辍学。因此,您的网络在每次开始时表现不同(检查 Dropout 的工作原理);
权重初始化,您在 Keras 和 TensorFlow 中使用哪种方法?
检查优化器的所有参数。
推荐阅读
- php - php curl 上传文件,问题在:new CurlFile _OR_ realpath _OR_ curl_file_create
- selenium - 实现 jenkins docker image+chrome+ruby 未知错误时的问题:Chrome 无法启动:崩溃(Selenium::WebDriver::Error::UnknownError)
- asp.net - 如何使用 Cofluent 库在 Windows 上通过 Kerberos 身份验证连接到 Kafka 集群?
- html - 外部形状以占据文本的全高
- c# - 在 Web API 中未检测到对象数组
- button - 带有活动类按钮的引导 4 个选项卡不起作用
- ios - iOS + React Native - 内存泄漏
- excel - 如何让excel从两个子字符串动作中决定?
- execution - tmux:复制模式停止执行 shell 命令
- maven - 错误:自动模块不能与 jlink 一起使用:-带有 JavaFX 的 Maven