python - 如何正确定义 Keras 循环层的 input_dim
问题描述
我正在尝试训练一些 NN 来预测时间序列。我正在使用Sequentional
模型来定义我的 NN 结构。看起来像:
from keras.models import Sequential
from keras.layers import Dense, Activation, SimpleRNN, Embedding
from keras import optimizers
from keras import losses
model = Sequential()
#model.add(Dense(units=5, input_dim=3, activation = 'tanh'))
model.add(SimpleRNN(units=5, input_dim = 3, activation = 'tanh'))
model.add(Dense(units=16, activation='tanh'))
model.add(Dense(1, activation='linear'))
prop = optimizers.rmsprop(lr=0.01)
sgd = optimizers.sgd(lr=0.01, nesterov=True, momentum=0.005)
model.compile(optimizer=prop, loss='mean_squared_error')
它不执行并返回错误是:
ValueError: Error when checking input: expected simple_rnn_9_input to have 3 dimensions, but got array with shape (221079, 3)
当我使用注释掉的Dense
图层时,一切都很好。我阅读了 Keras 文档,发现他们正在使用Embedding
层。虽然,我真的不明白为什么Embedding
layer 必须使用像SimpleRNN
or之类的循环层LSTM
。
train_set
是 4 列的 2D 数组 - 第 4 列是目标列,其余的是输入。
有没有什么简单的方法可以将 Keras 的循环层与传统Dense
层一起使用?我将不胜感激解释和一些代码示例。
最好的问候, 麦克斯
解决方案
我不是这方面的专家,但这可能会有所帮助
import numpy as np
import numpy as np
data = np.zeros((10,4))
X = data[:,0:3].reshape(-1,1,3)
y = data[:,3].reshape(-1,1)
print(X.shape)
print(y.shape)
印刷:
(10, 1, 3)
(10, 1)
然后:
model.fit(X, y)
推荐阅读
- android - 向android请求两种不同的权限
- angular - 在 Angular 组件中配置旋转滑块
- javascript - Angular 6 - 从 app.component.html 中删除数据并更新视图上的更改
- c++14 - 如何在 WebAssembly 中使用(C++ STL 的)向量
- php - usort,未在托管 Web 上正确排序
- sql - 为表 A 中的每个项目返回表 B 中的所有非活动项目
- unicode - 两种不同的眼睛表情符号?
- javascript - 使用 express.static 时忽略其他端点
- excel - openpyxl - 打开 XLSX 文件时出现“意外的关键字参数‘WindowHeight’”
- java - Spring Data JPA 和 Projection 为 TupleConverter 获取 ConverterNotFoundException