【问题标题】:The results after each training keras model are different每次训练keras模型后的结果都不一样
【发布时间】:2018-11-13 17:22:11
【问题描述】:

我是机器学习的新手。我想建立一个用于面部识别的 keras 模型。我目前正在使用该模型:

model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',
             input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))

# initiate RMSprop optimizer
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)

# Let's train the model using RMSprop
model.compile(loss='categorical_crossentropy',
          optimizer=opt,
           metrics=['accuracy'])

我用相同的数据和相同的参数训练,但是训练结果却大不相同。有100%的结果或28%的结果。 是什么造成了这种差异?

【问题讨论】:

  • 每次训练迭代都会导致模型中的权重更新。权重的变化会导致模型表现不同,从而导致训练结果的差异。
  • 感谢您的建议@Edwin
  • 模型在训练开始时使用随机权重进行初始化,因此每次训练都会到达不同的局部最小值,产生不同的结果。这是正常现象,不是编程问题。

标签: python machine-learning keras


【解决方案1】:

设置种子,训练模型时会解决问题。这将为您提供可重复性。

np.random.seed(10)
tf.set_random_seed(10)

还要确保训练和测试拆分也不会改变任何实例。因此,您也可以为数据拆分设置种子。

【讨论】:

  • 看来我对机器学习的了解太少了。感谢您的建议@AILearning
  • @Pythoner 欢迎来到 SO;如果答案解决了您的问题,请接受(见What should I do when someone answers my question?)。
  • 如果你不介意,你能推荐我一个python和keras的训练模型,用于将人脸识别应用于现实吗?我正在寻找的模型并尝试使用我的脸无法识别,它总是与数据中的其他人混淆。我的数据只有三个人——
  • @desertnaut 我正在寻找相关理论并尝试根据建议修复它们。如果这是答案,我会回去确认
猜你喜欢
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多