【发布时间】:2017-03-10 00:23:59
【问题描述】:
我最近在 Keras 中构建了一个 CNN(以 Tensorflow 作为后端),它以恒星光谱作为输入并预测三个恒星参数作为输出:温度、表面重力和金属度。我现在正在尝试创建一个执行相同操作的 RNN,以便比较两个模型。
在搜索示例和论坛后,我没有遇到很多与我的项目足够相似的应用程序。我尝试实现一个简单的 RNN,看看我是否能得出合理的结果,但到目前为止还没有运气:网络似乎根本没有在学习。
我真的可以使用一些指导来帮助我入门。具体来说: RNN 是否适合此类问题? 模型的正确输入形状是什么?我知道这取决于网络的架构,所以我想我的下一个问题是:什么是能够计算回归预测的简单架构?
我的输入数据是这样的,我有 m=50,000 个光谱,每个光谱有 n=7000 个数据点,并且我正在尝试学习 L=3 个输出标签。我也有 n & L 维度相同的测试集和交叉验证集。 当我将输入数据构造为 (m,n,1) 并将输出目标构造为 (m,L) 并使用以下架构时,损失似乎并没有减少。
n=7000
L=3
## train_X.shape = (50000, n, 1)
## train_Y.shape = (50000, L)
## cv_X.shape = (10000, n, 1)
## cv_Y.shape = (10000, L)
batch_size=32
lstm_layers = [16, 32]
input_shape = (None, n, 1)
model = Sequential([
InputLayer(batch_input_shape=input_shape),
LSTM(lstm_layers[0],return_sequences=True, dropout_W=0.2, dropout_U=0.2),
LSTM(lstm_layers[1], return_sequences=False),
Dense(L),
Activation('linear')
])
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['accuracy'])
model.fit(train_X, train_Y, batch_size=batch_size, nb_epoch=20,
validation_data=(cv_X, cv_Y), verbose=2)
我也尝试将输入形状更改为 (m, 1, n),但仍然没有成功。我不是在寻找一个最佳的网络,只是一些可以训练的东西,然后我可以从那里拿走它。我的输入数据不是时间序列的,但是频谱的一个部分和前一个部分之间存在关系,所以有没有一种方法可以将每个频谱构造成一个二维数组,让 RNN 从中学习恒星参数光谱?
【问题讨论】:
标签: python tensorflow regression keras recurrent-neural-network