Python 为什么NN在重复训练后不能得到一个确定的输出?

Python 为什么NN在重复训练后不能得到一个确定的输出?,python,numpy,tensorflow,machine-learning,keras,Python,Numpy,Tensorflow,Machine Learning,Keras,代码优先: import numpy as np np.random.seed(1231) from keras import backend as K import pickle from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Conv1D, MaxPooling1D from keras.util

代码优先:

import numpy as np
np.random.seed(1231)

from keras import backend as K
import pickle
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv1D, MaxPooling1D
from keras.utils import np_utils
from sklearn.model_selection import train_test_split
from keras import initializers

data=pickle.load(open('DATA.pkl','rb'),encoding='latin1')

X=np.array(data[0])
Y=np.array(data[1])

X-=np.min(X)
X/=np.max(X)

X_train, X_test, Y_train, Y_test =train_test_split(X,Y,test_size=0.25, random_state=456)

X_train = X_train.reshape(X_train.shape[0],1000,1)
X_test = X_test.reshape(X_test.shape[0],1000,1)

model = Sequential()
model.add(Flatten(input_shape=(1000,1)))
gu=initializers.glorot_uniform(seed=789)
model.add(Dense(1, activation='sigmoid',kernel_initializer=gu))

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

model.fit(X_train, Y_train,batch_size=1, epochs=1, verbose=2,shuffle=False)

score = model.evaluate(X_test, Y_test, verbose=0)

print(score)
print(model.get_layer(index=2).get_weights())
然后输出,有时是这样的:

Epoch 1/1
 - 1s - loss: 0.8007 - acc: 0.4720
[0.70776916790008548, 0.53200000023841854]
[array([[  2.89239828e-03],
       [ -1.48389703e-02],
       [  7.60693178e-02],
       ...
       [  2.92943567e-02],
       [  1.84460226e-02],
       [  2.38316301e-02]], dtype=float32), array([-0.00218478], dtype=float32)]
Epoch 1/1
 - 1s - loss: 0.8008 - acc: 0.4720
[0.7077700834274292, 0.53200000023841854]
[array([[  2.89072399e-03],
       [ -1.48402918e-02],
       [  7.60683641e-02],
       ...
       [  2.92898733e-02],
       [  1.84418838e-02],
       [  2.38287449e-02]], dtype=float32), array([-0.00218458], dtype=float32)]
但有时是这样的:

Epoch 1/1
 - 1s - loss: 0.8007 - acc: 0.4720
[0.70776916790008548, 0.53200000023841854]
[array([[  2.89239828e-03],
       [ -1.48389703e-02],
       [  7.60693178e-02],
       ...
       [  2.92943567e-02],
       [  1.84460226e-02],
       [  2.38316301e-02]], dtype=float32), array([-0.00218478], dtype=float32)]
Epoch 1/1
 - 1s - loss: 0.8008 - acc: 0.4720
[0.7077700834274292, 0.53200000023841854]
[array([[  2.89072399e-03],
       [ -1.48402918e-02],
       [  7.60683641e-02],
       ...
       [  2.92898733e-02],
       [  1.84418838e-02],
       [  2.38287449e-02]], dtype=float32), array([-0.00218458], dtype=float32)]
每次,即使在这个简单的网络中,输出也是不同的

我随机分配了种子,但效果不好


那么,代码有什么问题吗?(我希望它有完全可复制的输出)

尝试
tf.random.set_seed()
将其全局设置,以防在您意想不到的地方使用其他随机性-例如,可能是优化器


在版本1中,它是
tf.set\u random\u seed()

像这样<代码>导入tensorflow作为tf.random.set_seed(7890)但是:
属性错误:模块“tensorflow”没有属性“random”
我尝试过。
导入tensorflow作为tf.set_random_seed(4321)
也不起作用