tensorflow - 简单循环神经网络输出的实际意义
问题描述
我正在尝试学习 RNN 模型。这是我建立的模型:
N = 3 # number of samples
T = 10 # length of a single sample
D = 3 # number of features
K = 2 # number of output units
X = np.random.randn(N, T, D)
# Make an RNN
M = 5 # number of hidden units
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)) # output: 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)
模型是否正确预测/未正确预测的问题取决于多个问题,例如训练数据、超参数等。
推荐阅读
- sql - 如何在哪里格式化日期?
- kframework - 上下文在 K 中究竟做了什么?
- python - Tornado 在 chalice python 中抛出流关闭错误
- aws-lambda - AWS SAM 在 serverless.template 中设置基于 lambda 资源的策略
- python - 给定 N 的 toeplitz 矩阵
- bash - bash if "$1" == "0" 在运行 bash 提示符的函数时始终为 false
- python - 在 celery worker 退出之前对 KeyboardInterrupt 执行一些操作
- flutter - Flutter如何获取未知类型的父小部件
- python - 无法在python中使用pytesseract从tif图像中提取文本
- azure - 如何批量删除(比如数百万)分布在 Cosmos db sql api 中数百万个逻辑分区的文档?