我正在努力为简单的回归任务配置Keras LSTM.官方页面上有一些非常基本的解释:Keras RNN文档
但要完全理解,带有示例数据的示例配置将非常有用.
我几乎没有找到使用Keras-LSTM进行回归的示例.大多数示例都是关于分类(文本或图像).我研究了Keras发行版附带的LSTM示例和我通过Google搜索找到的一个示例:http://danielhnyk.cz/它提供了一些见解,尽管作者承认这种方法的内存效率非常低,因为数据样本必须非常冗余地存储.
虽然评论员(Taha)引入了一项改进,但数据存储仍然是多余的,我怀疑这是Keras开发人员的意图.
我已经下载了一些简单的示例顺序数据,这些数据恰好是来自雅虎财经的股票数据.它可以从雅虎财经数据免费获得
Date, Open, High, Low, Close, Volume, Adj Close
2016-05-18, 94.160004, 95.209999, 93.889999, 94.559998, 41923100, 94.559998
2016-05-17, 94.550003, 94.699997, 93.010002, 93.489998, 46507400, 93.489998
2016-05-16, 92.389999, 94.389999, 91.650002, 93.879997, 61140600, 93.879997
2016-05-13, 90.00, 91.669998, 90.00, 90.519997, 44188200, 90.519997
Run Code Online (Sandbox Code Playgroud)
该表包含8900多条此类Apple股票数据.每天有7列=数据点.要预测的值是"AdjClose",这是一天结束时的值
因此,目标是根据前几天的顺序预测第二天的AdjClose.(这可能几乎是不可能的,但总是很高兴看到工具在具有挑战性的条件下如何表现.)
我认为这应该是LSTM非常标准的预测/回归情况,并且可以轻松转移到其他问题域.
那么,如何格式化数据(X_train,y_train)以实现最小冗余,以及如何仅使用一个LSTM层和几个隐藏神经元来初始化Sequential模型?
亲切的问候,西奥
PS:我开始编码:
...
X_train
Out[6]:
array([[ 2.87500000e+01, 2.88750000e+01, 2.87500000e+01,
2.87500000e+01, 1.17258400e+08, 4.31358010e-01],
[ 2.73750019e+01, 2.73750019e+01, 2.72500000e+01,
2.72500000e+01, 4.39712000e+07, 4.08852011e-01],
[ 2.53750000e+01, 2.53750000e+01, 2.52500000e+01,
2.52500000e+01, 2.64320000e+07, 3.78845006e-01], …Run Code Online (Sandbox Code Playgroud) 我正在玩一个模型,该模型应该以 8x8 棋盘作为输入,编码为 224x224 灰度图像,然后输出 64x13 单热编码逻辑回归 = 方块上棋子的概率。
现在,在卷积层之后,我不太知道如何继续获取 2D 密集层作为结果/目标。
我尝试将 Dense(64,13) 作为层添加到我的顺序模型中,但收到错误“Dense` 只能接受 1 个位置参数 ('units',)”
是否有可能针对 2D 目标进行训练?
EDIT1:这是我的代码的相关部分,经过简化:
# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)
model = Sequential([
Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
Conv2D(8, (3,3), activation='relu'),
# some more repetitive Conv + Pooling Layers here
Flatten(),
Dense(64,13)
])
Run Code Online (Sandbox Code Playgroud)
TypeError:
Dense只能接受 1 个位置参数 ('units',),但您传递了以下位置参数:[64, 13]
EDIT2:正如 Anand V. Singh 所建议的,我将 Dense(64, 13) 更改为 Dense(832),效果很好。损失=均方误差。
使用“sparse_categorical_crossentropy”作为损失和 64x1 编码(而不是 64x13)不是更好吗?