keras.layers.Input()输入层解析
Input()参数解析
layers.Input(
shape=None,
batch_size=None,
name=None,
dtype=None,
sparse=False,
tensor=None,
ragged=False,
**kwargs,
)
Returns:
A tensor.
参数:
shape: 函数的输入形状,数据的形式为元组(元组参数要为int型),不包含batch大小的那个维度。如果有某个维度的信息不知道,则可以表示为None
batch_size: 一个可选的参数(整数类型),用来声明网络训练batch的大小
name: 给你的这层网络创建一个名字,名字应该在你的所有网络层中是不重复的,默认参数为None,系统会自动取名字。
dtype: 你输入的具体的数据的类型。有很多可选的参数,一般情况下我们选择 tf.float32 的类型,因为在精度满足的情况下,float32运算更快。
sparse: 指定要创建的占位符是否为稀疏的布尔值。 “参差的”和“稀疏的”中只有一个是真的。 请注意,如果sparse为False,稀疏张量仍然可以被传递到输入中——它们将被致密化为默认值0。
tensor: 一个可选的参数,将现有张量包装到输入层。如果设置了,图层将对这个张量使用 tf.TypeSpec。 而不是创建一个新的占位符张量。
ragged: 一个布尔值,指定要创建的占位符是否不规则。 “参差的”和“稀疏的”中只有一个是真的。 在本例中,“shape”参数中的“None”值表示不规则的尺寸。
type_spec: 用来创建输入占位符的TypeSpec对象。 当提供时,除了name之外的所有其他参数都必须为None。
**kwargs: 弃用参数支持。 支持batch_shape和batch_input_shape。也就是通过这个参数,之前的参数也能使用关键字使用。
Returns: .一个tensor张量
为什么要有这个input层
首先、 我们的第一层也就是输入层也是网络的一部分,也是需要各种参数的。如name、shape等等,把其当作网络的一层,就很好理解为什么了,因为我们自己建立的网络没有对输入端口进行一些初始化。
其次、 直接建立的普通的tensor张量,没有外加的一些属性,如
1)._keras_shape: 整型的形状元组通过keras-side 形状推理传播
2)._keras_history: 最后一层应用于张量,整个图层的图可以从那个层,递归地检索出来。
这些外加的属性,使我们通过知道模型的输入和输出来构建keras模型。
用于构建网络的第一层——输入层,该层会告诉网络我们的输入的尺寸是什么,这一点很重要。例如使用Model(input=x,output=y)构建网络,这种构建方式很常见,用途很广.
一个例子
from tensorflow.keras.layers import Input,Dense
from tensorflow.keras.models import Model
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)
链接:https://blog.csdn.net/To_be_little/article/details/123710537
其他
在构建神经网络中,一定要注意shape的大小,如果报错在shape上是一件很头疼的事情,所以写一部分测试一下是一个良好的编程习惯。
通常建议通过 Input
使用 Keras 函数模型(创建 InputLayer
)而不直接使用 InputLayer
。
将 InputLayer
与 Keras Sequential 模型一起使用时,可以通过将 input_shape
参数移动到 InputLayer
之后的第一层来跳过它。
from tensorflow import keras
from tensorflow.keras import layers
inputs = keras.Input(shape = (28, 28, 1)) ## 手写数字识别, 高*宽*通道 shape->image_height, image_width, image_channels; input_4 (InputLayer) [(None, 28, 28, 1)]
x = layers.Conv2D(filters = 32, kernel_size=3, activation='relu')(inputs)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=64, kernel_size=3, activation='relu')(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=128, kernel_size=3, activation='relu')(x)
x = layers.Flatten()(x)
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=inputs, outputs=outputs)
# With explicit InputLayer. model = tf.keras.Sequential([ tf.keras.layers.InputLayer(input_shape=(4,)), tf.keras.layers.Dense(8)]) model.compile(tf.optimizers.RMSprop(0.001), loss='mse') model.fit(np.zeros((10, 4)), np.ones((10, 8))) # Without InputLayer and let the first layer to have the input_shape. # Keras will add a input for the model behind the scene. model = tf.keras.Sequential([ tf.keras.layers.Dense(8, input_shape=(4,))]) model.compile(tf.optimizers.RMSprop(0.001), loss='mse') model.fit(np.zeros((10, 4)), np.ones((10, 8)))
InputLayer
实际上与在Dense
层中指定参数input_shape
相同。当你在后台使用method 2
时,Keras实际上使用了InputLayer
。
# Method 1
model_reg.add(tf.keras.layers.InputLayer(input_shape=(1,)))
model_reg.add(tf.keras.layers.Dense(units=10, activation=tf.keras.activations.relu))
# Method 2
model_reg.add(tf.keras.layers.Dense(units=10, input_shape=(1,), activation=tf.keras.activations.relu))
参数input_shape
实际上应该是一个元组,如果您注意到我在您的示例中将input_shape
设置为(1,)
这是一个元组,其中只有一个元素。由于您的数据是1D,因此每次传入一个元素,因此输入形状是(1,)
。
如果您的输入数据是2D输入(例如,在尝试基于多个变量预测房价时),那么您将拥有多行多列的数据。在本例中,传入X_reg_train
的最后一个维度的输入形状,即输入的数量。如果X_reg_train
是(1000,10)
,那么我们使用(10,)
的input_shape
。
model_reg.add(tf.keras.layers.Dense(units=10, input_shape=(X_reg_train.shape[1],), activation=tf.keras.activations.relu))
暂时忽略batch_size
,我们实际上只是发送一行数据来预测一个房价。batch_size
只是将多行数据分块在一起,这样我们就不必将整个数据集加载到计算开销很大的内存中,所以我们发送小块数据,默认值为32
。在运行训练时,您可能会注意到,在每个epoch下,它都会显示5/5
,这表示您拥有的5 batches
数据,因为训练大小是150
,150 / 32 = 5(rounded up)
。
对于3D input
和Dense
层,它实际上只是被展平到2D input
,即从(batch_size, sequence_length, dim) -> (batch_size * sequence_length, dim) -> (batch_size, sequence_length, hidden_units)
开始,这与使用Conv1D
层和kernel
的1
相同。所以在这个例子中我甚至不使用Dense
层。
REF
https://blog.csdn.net/weixin_44441131/article/details/105892591
https://blog.csdn.net/weixin_44441131/article/details/105905536
https://www.5axxw.com/questions/content/uhzy0n