如何适应/神经网络中多次jupyter笔记本运行?(How to fit/run the neura

2019-10-30 12:58发布

我使用keras构建一个简单的神经网络,如下所示:

import keras
from keras.models import Sequential
from keras.layers import Dense
classifier = Sequential()
classifier.add(Dense(10, kernel_initializer='uniform', activation= 'relu', input_dim = 2))
...
classifier.compile(optimizer= 'adam',loss='binary_crossentropy', metrics=['accuracy'])
classifier.fit(X_train,y_train,batch_size=10,epochs=100)

代码工作完全正常,即可享受90%的准确率,当我第一次在jupyter笔记本运行它。 但是,当我重新运行它,它的准确度急剧下降至50%,准确度在训练过程中并没有改善。 另外,如果我构造另一个NN这样在同类笔记本页面,它也有这个问题。

所以,我应该怎么做,如果我想,当我重新运行该代码以获得正确的结果,或在同类笔记本页面运行另一个NN?

PS:我使用tensorflow后端。

Answer 1:

编辑:结果是不同的,主要是因为权重初始化和批次。 但种子固定是不够的完全重现,请参见:

  • https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development
  • 为什么我不能得到可重复的结果中Keras即使我设置随机种子?

以前的答案:

神经网络学习有由于随机结果

  1. 随机重初始化
  2. 随机批量分割/在SGD算法如亚当排序

例如,该代码

import numpy as np
import keras 
from keras.models import Sequential
from keras.layers import Dense, Flatten

def run():
    classifier = Sequential()
    classifier.add(Flatten(input_shape=(28, 28)))
    classifier.add(Dense(10, kernel_initializer='uniform', activation= 'relu'))
    classifier.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    X_train, y_train = keras.datasets.mnist.load_data()[0]
    X_train = X_train[:100] # for example
    y_train = keras.utils.to_categorical(y_train)[:100]
    classifier.fit(X_train, y_train, batch_size=10, epochs=100)

给每个运行不同的结果。

>>> run()
Epoch 1/100
100/100 [==============================] - 0s 4ms/step - loss: 10.1763 - acc: 0.1700
...
Epoch 100/100
100/100 [==============================] - 0s 2ms/step - loss: 4.5131 - acc: 0.4700

>>> run()
Epoch 1/100
100/100 [==============================] - 0s 5ms/step - loss: 7.2993 - acc: 0.2000
...
Epoch 1/100
100/100 [==============================] - 0s 2ms/step - loss: 0.8059 - acc: 0.7000

您可以在keras随机数发生器解决种子(这是numpy的)可重复性。

>>> np.random.seed(1)
>>> run()
Epoch 1/100
100/100 [==============================] - 0s 5ms/step - loss: 7.6193 - acc: 0.1500
...
Epoch 100/100
100/100 [==============================] - 0s 2ms/step - loss: 0.3224 - acc: 0.6400

>>> np.random.seed(1)
>>> run()
Epoch 1/100
100/100 [==============================] - 0s 5ms/step - loss: 7.6193 - acc: 0.1500
...
Epoch 100/100
100/100 [==============================] - 0s 2ms/step - loss: 0.3224 - acc: 0.6400

https://github.com/keras-team/keras/issues/2743#issuecomment-219777627

PS代码可能有非常不同的结果,如果有一些问题与数据/模型(如在过小的数据,太容易模型这个MNIST例子)。 90%可能只是过度拟合。 检查另一个独立的试验数据分类。



文章来源: How to fit/run the neural network multiple times in jupyter notebook?