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

@浙大疏锦行

相关推荐
真的想上岸啊1 分钟前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
明天好,会的8 分钟前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
摸爬滚打李上进12 分钟前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
丁劲犇1 小时前
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
开发语言·c++·qt·tui·字符界面·curse
旷世奇才李先生1 小时前
Next.js 安装使用教程
开发语言·javascript·ecmascript
凛铄linshuo1 小时前
爬虫简单实操2——以贴吧为例爬取“某吧”前10页的网页代码
爬虫·python·学习
牛客企业服务1 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘
charlie1145141912 小时前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
胡斌附体2 小时前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
likeGhee2 小时前
python缓存装饰器实现方案
开发语言·python·缓存