简单的图像分类 CNN的tenforflow实现
下面是一个经典的 TensorFlow 模型算子图示例,展示了一个简单的卷积神经网络 (CNN) 用于图像分类的完整计算流程。这个模型包含了常见的卷积、池化、激活和全连接层等算子。

1 # tensorflow_cnn_example.py 2 import tensorflow as tf 3 from tensorflow.keras import layers, models 4 5 # 构建一个简单的CNN模型 6 def create_cnn_model(input_shape=(32, 32, 3), num_classes=10): 7 model = models.Sequential([ 8 # 输入层 9 layers.InputLayer(input_shape=input_shape, name='input_layer'), 10 11 # 第一个卷积块 12 layers.Conv2D(32, (3, 3), padding='same', name='conv2d_1'), 13 layers.BatchNormalization(name='batch_norm_1'), 14 layers.ReLU(name='relu_1'), 15 layers.MaxPooling2D((2, 2), name='max_pool_1'), 16 17 # 第二个卷积块 18 layers.Conv2D(64, (3, 3), padding='same', name='conv2d_2'), 19 layers.BatchNormalization(name='batch_norm_2'), 20 layers.ReLU(name='relu_2'), 21 layers.MaxPooling2D((2, 2), name='max_pool_2'), 22 23 # 第三个卷积块 24 layers.Conv2D(128, (3, 3), padding='same', name='conv2d_3'), 25 layers.BatchNormalization(name='batch_norm_3'), 26 layers.ReLU(name='relu_3'), 27 28 # 全局平均池化 29 layers.GlobalAveragePooling2D(name='global_avg_pool'), 30 31 # 全连接层 32 layers.Dense(128, name='dense_1'), 33 layers.ReLU(name='relu_4'), 34 layers.Dropout(0.5, name='dropout'), 35 layers.Dense(num_classes, name='logits'), 36 layers.Softmax(name='softmax_output') 37 ]) 38 39 return model 40 41 # 创建模型 42 model = create_cnn_model() 43 44 # 打印模型结构 45 model.summary() 46 47 # 构建算子图连接关系 48 def print_operator_graph(model): 49 print("\n=== 模型算子图连接关系 ===") 50 for i, layer in enumerate(model.layers): 51 if i == 0: # 输入层 52 print(f"{layer.name} (输入) -> {model.layers[i+1].name}") 53 elif i < len(model.layers) - 1: # 中间层 54 print(f"{layer.name} -> {model.layers[i+1].name}") 55 else: # 输出层 56 print(f"{layer.name} (输出)") 57 58 # 打印算子图连接关系 59 print_operator_graph(model)