Keras model.predict 给出与训练标签数组不同的形状

数据挖掘 张量流
2022-03-11 00:03:02

我正在使用以下代码来尝试学习 tensorflow。我已经明确指定了训练和验证X以及y数组的形状。

import numpy as np
import tensorflow as tf

f = lambda x: 2*x
Xtrain = np.random.rand(400,1)
ytrain = f(Xtrain)
Xval = np.random.rand(200,1)
yval = f(Xval)

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.MeanSquaredError()
             )

model.fit(Xtrain, ytrain, epochs=50, verbose=0)

当我运行时yval.shape, model.predict(Xval).shape,我得到了输出((200, 1), (200, 10))我无法理解这些额外的 9 个维度是从哪里来的。甚至Xval预测也应该有形状(200, 1)

1个回答

10 个输出来自网络的最后一层有 10 个神经元这一事实。

如果您将模型更改为

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1, activation='relu')
])

其输出的形状为(200, 1)