相同的NN架构在张量流和keras中提供不同的精度

时间:2018-06-20 06:11:14

标签: python tensorflow keras deep-learning

使用[4,4]隐藏层在虹膜数据集上训练并在tensorflow和keras中分别创建的神经网络给出了不同的结果。

虽然张量流模型在测试中提供了96.6%的精度,但keras模型仅提供了约50%的精度。两种情况下的各种超参数(如学习率,优化器,最小批次大小等)都相同。

Keras模型

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)

Tensorflow模型

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模型,我确实尝试过更改学习率,增加历元数,使用不同的优化器等。因此,准确性仍然很差。显然,两个模型都在做不同的事情,但是从表面上看,对于所有关键方面,它们对我来说似乎都是相同的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

它们具有相同的体系结构,仅此而已。

性能差异来自以下一个或多个因素:

  • 您有辍学。因此,您的网络在每次启动时的行为都不同(请检查Dropout的工作方式);

  • 重量初始化,您在Keras和TensorFlow中使用哪种方法?

  • 检查优化器的所有参数。