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

@浙大疏锦行

相关推荐
墨月白几秒前
[QT]QProcess的相关使用
android·开发语言·qt
小小码农Come on几秒前
QT信号槽机制原理
开发语言·qt
KoiHeng8 分钟前
Java的文件知识与IO操作
java·开发语言
-Try hard-15 分钟前
完全二叉树、非完全二叉树、哈希表的创建与遍历
开发语言·算法·vim·散列表
霍理迪22 分钟前
JS作用域与预解析
开发语言·前端·javascript
闻哥25 分钟前
深入理解 Spring @Conditional 注解:原理与实战
java·jvm·后端·python·spring
Traced back26 分钟前
# C# WinForms 数据库清理系统基础知识与避坑指南
开发语言·数据库·c#
煜磊26 分钟前
MD5加盐值-注册与登录
java·开发语言
茉莉玫瑰花茶36 分钟前
C++ 17 详细特性解析(4)
开发语言·c++·算法
小鸡吃米…37 分钟前
机器学习 - 堆叠集成(Stacking)
人工智能·python·机器学习