【发布时间】:2017-06-01 11:00:30
【问题描述】:
我有一个用于构建 keras 顺序模型的 python 脚本。每次我得到不同的结果而脚本没有任何变化。请看一下脚本。我哪里错了,请帮忙。
thedata = pandas.read_csv("C:/User/Downloads/LSTM/data.csv", sep=', ', delimiter=',', header='infer', names=None)
np.random.seed(1337)
x = thedata['Review']
y = thedata['Polarity_Numeral']
x = x.iloc[:].values
y = y.iloc[:].values
tk = Tokenizer(num_words=40000, lower=True, split=" ")
tk.fit_on_texts(x)
x = tk.texts_to_sequences(x)
max_len = 120
x = pad_sequences(x, maxlen=max_len)
max_features = 40000
testx = x[51000:52588]
print (testx)
testy = y[51000:52588]
x = x[0:50999]
y = y[0:50999]
model = Sequential()
model.add(Embedding(max_features, 128, input_length=max_len))
model.add(SpatialDropout1D(0.3))
model.add(GaussianNoise(0.2))
model.add(LSTM(128 , dropout_W=0.3, dropout_U=0.3, return_sequences=False))
model.add(Dense(1, W_regularizer=l2(0.2)))
model.add(Activation('sigmoid'))
model.summary()
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.00)
model.compile(loss='binary_crossentropy', optimizer=adam,metrics = ['accuracy'] )
model_history = model.fit(x, y=y, batch_size=64, epochs=1, verbose=1,validation_split = 0.2)
model.save('C:/User/Downloads/model.h5')
model.save_weights('C:/User/Downloads/weight_model.h5')
predictions = model.predict(testx)
print (predictions)
在第一次运行时,我得到了 57% 在第二次运行.. 53% 在第三.. 55% 每次都是随机变化的。 感谢您的帮助!
【问题讨论】:
-
你在使用 tensorflow 后端吗?比它可能与这个issue有关。
-
关于
tk.fit_on_texts(x),这是一种培训吗?如果是这样,您还应该保存您的 x 和 y,并确保它们对于新模型和加载的模型完全相同。 -
是的,用于文本预处理。我无法准确理解正在发生的事情。训练和测试方面的数据集相同,我加载的模型相同,但其准确性仍然不同。
-
@user 这是因为权重是随机初始化的,试试我下面的代码。