【发布时间】:2018-02-07 14:57:44
【问题描述】:
我正在尝试学习深度学习,我偶然发现了一个练习here
这是第一次热身运动。我被困住了。对于小长度(2,3)的恒定序列,它没有问题。但是,当我尝试 50 的整个序列时,它会以 50% 的准确率停止,这基本上是随机猜测。
根据here 太平空间蚂蚁找不到梯度来解决。所以我尝试了不断增加长度和每次保存模型的方法(2、5、10、15、20、30、40、50)。似乎它不能很好地概括,好像我输入的序列比我学到的更大打开,它失败了。
根据here 应该是很容易的问题。我想不通。使用了一些不同的 LSTM 架构悬停器。
一个解决方案here 对完全相同的问题表示它适用于 Adagrad 优化器和 0.5 的学习率。
我不确定是否有一点,如果我一开始就喂它。我希望我做对了。
对于可变长度,我尝试过但失败得很惨。
代码:
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, LSTM
from keras.optimizers import SGD, Adagrad, Adadelta
from keras.callbacks import TensorBoard
from keras.models import load_model
import numpy as np
import time
import os.path
# building the model
def build_model():
model = Sequential()
model.add(LSTM(
32,
input_shape=(None, 1),
return_sequences=False))
model.add(Dropout(0.1))
model.add(Dense(
1))
model.add(Activation("sigmoid"))
return model
# generating random data
def generate_data(num_points, seq_length):
#seq_rand = np.random.randint(1,12)
x = np.random.randint(2, size=(num_points, seq_length, 1))
y = x.sum(axis=1) % 2
return x, y
X, y = generate_data(100000, 50)
X_test, y_test = generate_data(1000, 50)
tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
write_graph=True, write_images=False)
if os.path.isfile('model.h5'):
model = load_model('model.h5')
else:
model = build_model()
opti = Adagrad(lr=0.5)
model.compile(loss="mse", optimizer=opti, metrics=['binary_accuracy'])
model.fit(
X, y,
batch_size=10, callbacks=[tensorboard],
epochs=5)
score = model.evaluate(X_test, y_test,
batch_size=1,
verbose=1)
print('Test score:', score)
print('Model saved')
model.save('model.h5')
我现在很困惑。感谢您的回复!
编辑:将之前实验中的 return_sequences 修复为 False 拼写错误。
【问题讨论】:
-
您确定您的代码有效吗?不应该在那里
return_sequences=False? -
你说得对,我有两个 LSTM 层,第二个被删除,忘记重写 return_sequences。现在它运行良好。问题仍然存在。
-
你的损失是否在
0.69附近饱和? -
如果我选择 loss='binary_crossentropy',它确实会在 0.69 左右饱和。当我使用 loss='mse' 时,如图所示,它在 0.25 处饱和。我认为这是用不同的方式说同样的话。
-
是的 - 它只是不断预测
0- 你可以很容易地检查:)
标签: python tensorflow neural-network keras lstm