Skip to main content

Keras层输入释义与代码示例

与Keras层参数相关的常见问题简答,包括input shape、weight、unit 以及 dim。此外还有例子。
Created on April 19|Last edited on April 19
本报告是作者Ayush Thakur所写的"Keras Layer Input Explanation With Code Samples"的翻译



问题:如何理解input_shape、unit、dim及其他参数之间的区别?

对于任意 Keras 层(层类)而言,是否有人能够说明一下如何理解 input_shapeunitdim 及其他参数之间的区别?
举例来说,文档中说 units 说明了Keras层的输出形状。
在下方的神经网络图像中,hidden layer1有四个 unit。这是否就能直接理解为Layer 对象的 units 属性?还是说Keras 中的unit等于隐藏层中各权数的 形状乘以unit 数量?
如何借助下图理解模型尤其是各层的属性并对其进行可视化?



解答

Keras层中的Unit

在Keras层中,unit指神经网络架构中各层的神经元数量。如:
some_layer = tf.keras.layers.Dense(10, activation=None)
Unit数量为10。所以就有10个神经元。
在上方的图像中,hidden layer 1 有4个unit,hidden layer 2 有4个unit,output 层中有2个unit。

Keras层中的Shape

在Keras 层中shape 是表示数组或张量的每个维度中有多少元素的元组(tuple)。
如:shape 为 (3, 4, 4) 的张量有 3 个维度,首个维度有 3 个元素。这 3 个元素中,每个元素有 4 个元素;而这 4 个元素中每个又有 4 个元素。那么总共就是 3 x 4 x 4 = 48 个元素。

Keras层中的Input Shape

在Keras层中,input shape通常是训练时提供给Keras模型的输入数据形状。模型无法知晓训练数据的形状。其他张量(层)的形状将自动计算。
每一类Keras层都需要输入具有特定的维度数:
  • Dense层要求输入为 (batch_size, input_size)
  • 2D卷积层需要输入为:
    • 如果使用channels_last:(batch_size, imageside1, imageside2, channels)
    • 如果使用channels_first:(batch_size, channels, imageside1, imageside2)
  • 1D卷积和循环层使用 (batch_size, sequence_length, features)
  • 其他张量的形状会根据随其他特别参数提供的unit数量进行计算(比如 Conv2D 层的 kernel_size)。

Keras层中的Weight

在Keras层中,weight是能够通过某种已学习数学运算将输入形状转换为输出形状的矩阵。
weight将根据输入和输出形状进行全自动计算。同样,各类层都有特定的作用方式。

Keras层中的 Dim

通常而言,dim是指 Keras层中的一个张量有多少维度。例如,shape 为 (32, 1024) 的张量有 2 个维度。
我们通常会将单dim张量定义为 (3,)。即该一维输入有3个元素。

我们来说明一下问题章节中的这张Keras图像

让我们再次回看上方问题部分的图像,并在Keras中对图像进行定义。


使用序贯API

from keras.models import Sequential
from keras.layers import *

model = Sequential()

model.add(Input(shape=(3,))) # Input tensor
model.add(Dense(units=4)) # hidden layer 1
model.add(Dense(units=4)) #hidden layer 2
model.add(Dense(units=1)) #output layer

使用函数式API

from keras.models import Model
from keras.layers import *


inputs = Input(shape=(3,)) # input tensor
hidden1 = Dense(units=4)(inputs) # hidden layer 1
hidden2 = Dense(units=4)(hidden1) # hidden layer 2
outputs = Dense(units=1)(hidden2) # hidden layer 1

#define the model's start and end points
model = Model(inputs, outputs)
我们来看看模型摘要及各层的输入形状。

图 1:模型摘要
本解答得到了此Stack Overflow线程的启发。
Iterate on AI agents and models faster. Try Weights & Biases today.