首页 > 解决方案 > keras Tensorflow中InputLayer的输入形状是什么?

问题描述

我有这个数据

X_regression = tf.range(0, 1000, 5)
y_regression = X + 100

X_reg_train, X_reg_test = X_regression[:150], X_regression[150:]
y_reg_train, y_reg_test = y_regression[:150], y_regression[150:]

我检查数据输入数据

X_reg_train[0], X_reg_train[0].shape, X_reg_train[0].ndim

它返回:

(<tf.Tensor: shape=(), dtype=int32, numpy=0>, TensorShape([]), 0)

我建立一个模型:

# Set the random seed
tf.random.set_seed(42)

# Create the model
model_reg = tf.keras.models.Sequential()

# Add Input layer
model_reg.add(tf.keras.layers.InputLayer(input_shape=[1]))

# Add Hidden layers
model_reg.add(tf.keras.layers.Dense(units=10, activation=tf.keras.activations.relu))

# Add last layer
model_reg.add(tf.keras.layers.Dense(units=1))

# Compile the model
model_reg.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.mae,
                  metrics=[tf.keras.metrics.mae])

# Fit the model
model_reg.fit(X_reg_train, y_reg_train, epochs=10)

该模型有效。

但是,我很困惑input_shape

为什么会[1]出现这种情况?为什么有时它是一个元组?

将不胜感激input_shape在不同情况下的不同格式的解释。

标签: pythontensorflowdeep-learningtf.keras

解决方案


在 Keras 中,输入层本身并不是一个层,而是一个张量。这是您发送到第一个隐藏层的起始张量。此张量必须与您的训练数据具有相同的形状。

示例:如果您有 30 张 50x50 像素的 RGB 图像(3 个通道),则输入数据的形状为(30,50,50,3). 然后你的输入层张量,必须有这个形状(详见“keras 中的形状”部分)。

每种类型的层都需要具有一定维数的输入:

  • 密集层需要输入,(batch_size, input_size)或者(batch_size, optional,...,optional, input_size)在你的情况下只是(input_size)

  • 2D 卷积层需要输入为:

    • 如果使用 channels_last:(batch_size, imageside1, imageside2, channels)
    • 如果使用 channels_first:(batch_size, channels, imageside1, imageside2)
  • 一维卷积和循环层使用(batch_size, sequence_length, features)

以下是一些有用的链接:Keras 输入说明:input_shape、units、batch_size、dim 等 https://keras.io/api/layers/core_layers/input/


推荐阅读