导入
Keras 层 API(第一部分)
了解 Keras,这是最流行的深度学习库之一,并探索其功能以实现神经网络层。
Keras 中的全连接层
1import tensorflow as tf 2from tensorflow.keras import layers 3 4dense_layer = layers.Dense(8, activation='relu')
1import tensorflow as tf 2from tensorflow.keras import layers 3 4dense_layer = layers.Dense(8, activation='relu') 5 6# 从均匀分布中生成随机值 7input_tensor = tf.random.uniform(shape=(3, 5), minval=0, maxval=10, dtype=tf.int32) 8output_tensor = dense_layer(input_tensor) 9print('\n\n *** 输入张量 *** \n\n', input_tensor, 10 '\n\n *** 输出张量 *** \n\n', output_tensor, 11 '\n\n *** 层权重 *** \n\n', dense_layer.weights)
使用正态分布生成权重的自定义 Keras 层初始化器
1custom_initializer = tf.keras.initializers.RandomNormal(mean=0., stddev=1.) 2dense_layer = tf.keras.layers.Dense(10, kernel_initializer=custom_initializer)
Keras 激活函数
1import tensorflow as tf 2from tensorflow import keras 3from tensorflow.keras import activations 4 5input_tensor = tf.constant([[-10.0, -5.0, 0.0, 5.0, 10.0], 6 [-1.0, -0.5, 0.0, 0.5, 1.0]], dtype=tf.float32) 7 8# 将 Keras 激活函数应用于输入张量 9sig_func = keras.activations.sigmoid(input_tensor) 10tanh_func = tf.keras.activations.tanh(input_tensor) 11relu_func = keras.activations.relu(input_tensor, alpha=0.1) # alpha 控制小于 0 时的斜率 12softmax_func = keras.activations.softmax(input_tensor, axis=-1) # softmax 沿指定轴计算,-1 表示最后一个轴 13 14print('\n\n Sigmoid 输出: \n', sig_func.numpy(), 15 '\n\n Tanh 输出: \n', tanh_func.numpy(), 16 '\n\n ReLU 输出: \n', relu_func.numpy(), 17 '\n\n Softmax 输出: \n', softmax_func.numpy())
1import tensorflow as tf 2from tensorflow import keras 3from tensorflow.keras import layers 4 5# 输入为大小为 8 的批处理,图像尺寸为 32×32×3 的 RGB 图像 6input_dimensions = (8, 32, 32, 3) 7input_tensor = tf.random.normal(input_dimensions) 8output_conv2D = tf.keras.layers.Conv2D(filters=10, kernel_size=(5, 5), 9 activation='relu', 10 # 取消注释下一行可使输出与输入具有相同的空间尺寸 11 #padding = 'same', 12 input_shape=input_dimensions[1:])(input_tensor) 13print('\nConv2D 层输出的形状为', output_conv2D.shape) 14 15# 同样输入条件下 16output_dw_conv2D = tf.keras.layers.DepthwiseConv2D(kernel_size=(5, 5), 17 activation='relu', 18 # 取消注释下一行可保持输入输出尺寸一致 19 #padding = 'same', 20 input_shape=input_dimensions[1:])(input_tensor) 21print('\nDepthwiseConv2D 层输出的形状为', output_dw_conv2D.shape) 22 23# 同样输入条件下 24output_sep_conv2D = tf.keras.layers.SeparableConv2D(filters=10, kernel_size=(5, 5), 25 activation='relu', 26 # 取消注释下一行可保持输入输出尺寸一致 27 #padding = 'same', 28 input_shape=input_dimensions[1:])(input_tensor) 29print('\nSeparableConv2D 层输出的形状为', output_sep_conv2D.shape) 30 31# 输入为大小为 8 的批处理,体积数据尺寸为 32×32×32×1 的单通道视频帧 32input_dimensions = (8, 32, 32, 32, 1) 33input_tensor = tf.random.normal(input_dimensions) 34output_conv3D = tf.keras.layers.Conv3D(filters=10, kernel_size=(5, 5, 5), 35 activation='relu', 36 # 取消注释下一行可使输出与输入空间尺寸一致 37 #padding = 'same', 38 input_shape=input_dimensions[1:])(input_tensor) 39print('\nConv3D 层输出的形状为', output_conv3D.shape)