python - 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
在不同情况下的不同格式的解释。
解决方案
在 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)
- 如果使用 channels_last:
一维卷积和循环层使用
(batch_size, sequence_length, features)
以下是一些有用的链接:Keras 输入说明:input_shape、units、batch_size、dim 等 https://keras.io/api/layers/core_layers/input/
推荐阅读
- ansible - 未在 group_vars 中评估的 Ansible 主机变量
- php - Laravel - 归档数据,删除和插入另一个表
- null - 如何不使用 jq 跳过包含 null 的数组?
- android - 如何使用嵌套侦听器从 Firebase 实时数据库中获取特定用户列表
- javascript - mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应
- javascript - 没有收到来自json的任何响应
- python-3.x - 如何从 matplotlib 中的 ax 获取子图的大小?
- adobe-analytics - Adobe 分析 API
- c# - 基类中的继承和判别器
- mysql - 不小心用旧数据覆盖了 mysql 数据库。