为什么神经网络在重复训练后无法获得一个确定的输出?

首先是代码:

import numpy as npnp.random.seed(1231)from keras import backend as Kimport picklefrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Conv1D, MaxPooling1Dfrom keras.utils import np_utilsfrom sklearn.model_selection import train_test_splitfrom keras import initializersdata=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)]

每次输出在这种简单的网络中都是不同的。

我已经设置了随机种子,但它们似乎效果不佳。

那么,代码的问题出在哪里?(我希望它能有完全可重现的输出)


回答:

尝试使用tf.random.set_seed()来全局设置种子,以防在你未预料的地方使用了其他随机性 – 例如,可能是优化器的原因。

在版本1中,它是tf.set_random_seed()

Related Posts

用于比较两个向量进行分类的损失函数

我正在进行一项自然语言处理任务,分析文档并将其分类到六…

(OpenNMT) 西班牙语到英语模型的改进

我目前正在尝试使用yaml脚本训练一个西班牙语到英语的…

什么是多变量时间序列在Keras中LSTM的正确输入形状?

我无法理解将多变量时间序列输入到LSTM的正确方法是什…

GPU 用于随机森林回归器

我对机器学习还是新手,之前所有的机器学习项目都是使用 …

关于sklearn中SVC对象的`decision_function_shape`参数的澄清

问题 decision_function_shape参…

将数据加载到 X_train 和 Y_train

如果我的数据是以这种方式组织的,我应该如何将数据加载到…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注