我试图根据输入的数字来预测一个整数序列。
输入由10个整数的值组成:
array([[2021001001], [2021001002],...,
,[2021335249]],dtype=int64)
输出如下,一个包含7个整数的数组。
array([[23, 26, 17, ..., 21, 16, 4],
[13, 24, 2, ..., 27, 10, 28],
...,
[ 5, 16, 28, ..., 12, 27, 26]], dtype=int64)
这意味着序列号(输入)[2021001001]将返回以下序列(输出)[23,26,17,...,21,16,4]。
我试着在这些输入和输出上训练一个LSTM,以预测下面的序列将基于一个序列号。我使用了大约+60K的历史数据来做这件事。到目前为止,我做了以下工作:
model = tf.keras.Sequential()
model.add(layers.LSTM(256, activation='relu', input_shape=(10, 1), recurrent_dropout=0.2))
model.add(layers.Dense(7))
model.compile(optimizer=tf.keras.optimizers.Adam(0.00001), loss=tf.keras.losses.MeanSquaredError(), metrics=['accuracy'])
model.fit(inputs, output, epochs=10, verbose=1, validation_split=0.2, batch_size=256)
在拟合后测试模型时,我们会得到如下奇怪的结果:
predictNextNumber = model.predict(tests_[0], verbose=1)
print(predictNextNumber)
1/1 [==============================] - 0s 253ms/step
[[[14.475913][14.757163][14.874351][14.702476][14.639976][14.624351][14.655601]]]
While the expected output should be an array of integers [24, 12, 3, 5, 11, 8, 4].
我不知道问题出在哪里。Keras一开始抱怨了很多关于形状的问题,但是当我处理的时候,我一直收到不好的结果。任何帮助都会很感激。
2条答案
按热度按时间6ojccjat1#
你对问题的描述有点模糊。获得一些实际的数据会很有用。我们可以自己尝试一下。也不清楚这些数据代表什么,所以我们不能告诉你你所做的是否有成功的机会。不清楚x和y是否预测。
然而,很可能是输入和输出对于网络来说太大了。网络(通常)使用[-1,1]格式的数字更好,所以你可能应该使用类似StandardScaler的函数。你不必为此安装sklearn。你只需要计算数据的平均值和标准差,然后根据
和
对于逆运算,给定
m
是数据x
的平均值,d
是数据x
的标准差。由于输入和输出似乎来自不同的分布,因此必须执行两次此操作。
假设您使用sklearn的
StandardScaler
,您将执行以下操作:cdmah0mi2#
输入的数字非常大,因此添加一个规范化层:
你可能需要为更多的纪元进行训练。
优化器的
learning_rate
似乎有点低,可能先尝试默认值。由于您预测的是连续值,因此您的度量不应是
accuracy
,而是mse
或mae
或类似值。