我正在学习RNN模型。这是我的构建模型:
N = 3 # 样本数量T = 10 # 单个样本的长度D = 3 # 特征数量K = 2 # 输出单元数量X = np.random.randn(N, T, D)# 创建一个RNNM = 5 # 隐藏单元数量i = tf.keras.layers.Input(shape=(T, D))x = tf.keras.layers.SimpleRNN(M)(i)x = tf.keras.layers.Dense(K)(x)model = tf.keras.Model(i, x)Yhat = model.predict(X[0].reshape(1, -1, D)) # 输出: array([[-0.67114466, -0.65754676]], dtype=float32)
我不理解Yhat
的含义。这里我将X视为序列数据:
[data_point0...data_pointT], [data_point0...data_pointT], [data_point0...data_pointT]
每个数据点有D=3
个特征。
这里Yhat.shape==(1, 2)
。
2不等于D
,即特征数量。我猜,model.predict()
并不是对下一个数据点进行预测。如果model.predict()
是对下一个数据点进行预测,结果的形状应该是(1, D)
。
那么Yhat
的实际意义是什么呢?
回答:
你应该注意模型的结构。
在RNN
层之后,你使用了一个Dense
层,其输出维度为2!因此,运行model.predict()
得到的输出大小是正确的。
如果你希望它有其他维度,可以改变Dense
层的输出大小。从x = tf.keras.layers.Dense(K)(x)
改为x = tf.keras.layers.Dense(D)(x)
模型是否正确预测取决于多个因素,例如训练数据、超参数等。