python第31天打卡

python 复制代码
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers, optimizers, utils, datasets

# 数据加载和预处理函数
def load_and_preprocess_data():
    (x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()
    # 重塑并归一化图像数据
    x_train = x_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
    x_test = x_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0
    # 转换标签为one-hot编码
    y_train = utils.to_categorical(y_train, 10)
    y_test = utils.to_categorical(y_test, 10)
    return (x_train, y_train), (x_test, y_test)

# 模型定义
def create_simple_cnn():
    return keras.Sequential([
        layers.Conv2D(16, (3, 3), activation='relu', input_shape=(28, 28, 1)),
        layers.MaxPooling2D((2, 2)),
        layers.Flatten(),
        layers.Dense(128, activation='relu'),
        layers.Dense(10, activation='softmax')
    ])

def create_complex_cnn():
    return keras.Sequential([
        layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
        layers.MaxPooling2D((2, 2)),
        layers.Conv2D(64, (3, 3), activation='relu'),
        layers.MaxPooling2D((2, 2)),
        layers.Flatten(),
        layers.Dense(256, activation='relu'),
        layers.Dense(128, activation='relu'),
        layers.Dense(10, activation='softmax')
    ])

# 训练和评估函数
def train_and_evaluate(model, optimizer, x_train, y_train, x_test, y_test):
    model.compile(
        optimizer=optimizer,
        loss='categorical_crossentropy',
        metrics=['accuracy']
    )
    history = model.fit(
        x_train, y_train,
        epochs=5,
        batch_size=64,
        validation_data=(x_test, y_test)
    )
    return history.history

# 主程序
if __name__ == "__main__":
    # 加载数据
    (x_train, y_train), (x_test, y_test) = load_and_preprocess_data()
    
    # 模型和优化器配置
    model_configs = [
        ('Simple CNN', create_simple_cnn),
        ('Complex CNN', create_complex_cnn)
    ]
    optimizers_config = {
        'SGD': optimizers.SGD(learning_rate=0.01),
        'Adam': optimizers.Adam(learning_rate=0.001)
    }
    
    # 训练和评估所有组合
    results = {}
    for model_name, model_fn in model_configs:
        for opt_name, optimizer in optimizers_config.items():
            print(f"\n{'='*50}")
            print(f"Training {model_name} with {opt_name} optimizer:")
            
            model = model_fn()
            history = train_and_evaluate(
                model, optimizer,
                x_train, y_train,
                x_test, y_test
            )
            
            # 记录结果
            results[f"{model_name}_{opt_name}"] = history
            print(f"\nTraining results for {model_name}/{opt_name}:")
            print(f"Final Training Accuracy: {history['accuracy'][-1]:.4f}")
            print(f"Final Validation Accuracy: {history['val_accuracy'][-1]:.4f}")
            print(f"Final Training Loss: {history['loss'][-1]:.4f}")
            print(f"Final Validation Loss: {history['val_loss'][-1]:.4f}")

@浙大疏锦行

相关推荐
wj3055853784 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
为何创造硅基生物5 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好5 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李5 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅5 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
qingfeng154155 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
之歆6 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
cen__y7 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm