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}")

@浙大疏锦行

相关推荐
2401_871492851 小时前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
FreakStudio1 小时前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
:1211 小时前
java基础
java·开发语言
SilentSamsara2 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
小短腿的代码世界2 小时前
Qt文件系统与IO深度解析:从QFile到异步文件操作
开发语言·qt
zhoutongsheng2 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
harder3213 小时前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
.5483 小时前
## Sorting(排序算法)
python·算法·排序算法
ydmy4 小时前
注意力机制(个人理解)
pytorch·python·深度学习
jinanwuhuaguo4 小时前
OpenClaw工程解剖——RAG、向量织构与“记忆宫殿”的索引拓扑学(第十三篇)
android·开发语言·人工智能·kotlin·拓扑学·openclaw