【发布时间】:2021-08-12 04:58:36
【问题描述】:
我看不出我正在做的事情与我正在遵循的 Google TFP 示例之间的区别。我做错了什么/我应该做不同的事情吗?
[设置:Win 10 Home 64 位 20H2,Python 3.7,TF2.4.1,TFP 0.12.2,在 Jupyter Lab 中运行]
我一直在按照 TFP Probabilistic Layers Regression 的例子逐步建立模型。案例 1 代码运行良好,但我的并行模型没有,我看不出可能导致这种情况的差异
yhat = model(x_tst)
失败并显示消息 Input 0 of layer sequential_14 is incompatible with the layer: : expected min_ndim=2, found ndim=1. Full shape received: (2019,)(这是 x_tst 的正确 1D 大小)
为了比较:Google 的 TFP 示例的 load_dataset 函数返回 y, x, x_tst,它们都是大小为 150 的 np.ndarray,而我使用 pandas.read_csv 从 csv 文件中读取数据,将其拆分为 train_ 和 test_datasets 然后取来自训练数据集的 1 列数据作为自变量“g”和因变量“redz”。
我知道x、y等需要是np.ndarray,但是没有直接创建ndarray,所以我有...
x = np.array(train_dataset['g'])
y = np.array(train_dataset['redz'])
x_tst = np.array(test_dataset['g'])
其中 x、y、x_tst 都是一维的 - 就像 TFP 示例一样。
模型本身运行
model = tf.keras.Sequential([
tf.keras.layers.Dense(1),
tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t, scale=1)),
])
# Do inference.
model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01), loss=negloglik)
model.fit(x, y, epochs=1, verbose=False);
(绘制时给出了谷歌数据的预期输出 - 我还没有做到这一点):
但是,根据示例,当我尝试通过执行 yhat = model(x_tst) 来“获利”时,我得到了上面给出的尺寸错误。
怎么了?
(如果我尝试 mode.predict,我认为我在 TFP 中遇到了一个已知的错误/差距;那么它会导致断言失败)
更新 - 显式重塑解决问题
来自 Frightera 的提示引发了进一步的调查:x_tst has shape (2019,)
x_tst = x_tst.rehape(2019,1) 的重塑解决了这个问题。 TF 的要求是否不一致,或者是否有充分的理由需要明确的最终维度 1?谁知道。至少现在可以做出预测。
【问题讨论】:
-
你能添加你的数据集的形状吗?
-
@Frightera all 1D,就像 TFP 示例一样(我也将信息添加到帖子中)
-
TFP 示例类似于 (150,1)。尝试重塑您的数据?
-
@Frightera - 查看更新。谢谢。
标签: tensorflow2.0 tensorflow-probability