人工智能 | 基于Tensor的人工智能编程方法 | 熟悉图像相关的数据集 | 掌握多层感知器模型和CNN模型的特性 | 掌握建模的流程、对模型结果的分析及优化

一、实验目的及要求

1. 掌握Python语言的编程方法和基于Tensor的人工智能编程方法

2. 熟悉图像相关的数据集,如iris数据集,Mnist手写数字数据集、CIFAR10目标识别数据集

3. 掌握多层感知器模型和CNN模型的特性

4. 掌握建模的流程、对模型结果的分析及优化

二、实验设备(环境)及要求

Anaconda、Jupyter Notebook、pandas、TensorFlow

三、实验内容与步骤

1. 搭建tensorflow环境

(1)安装Anaconda

(2)配置conda的国内镜像源

(3)创建tensorflow虚拟环境

(4)在虚拟环境中安装tensorflow

2. TensorFlow的基本用法 

 1)低阶API实现线性回归:用数据拟合y=2x的线性函数

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
input_x = np.float32(np.linspace(-1,1,100))                #在区间[-1,1)内产生100个数的等差数列,作为输入
input_y = 2*input_x + np.random.randn(*input_x.shape)*0.3  #y=2x+随机噪声
weight = tf.Variable(1.,dtype=tf.float32,name='weight')
bias = tf.Variable(1.,dtype=tf.float32,name='bias')
def model(x):                                              #定义了线性模型 y=weight*x+bias
    pred= tf.multiply(x,weight) + bias
    return pred
step=0
opt=tf.optimizers.Adam(1e-1)                               #选择优化器,是一种梯度下降的方法
for x,y in zip(input_x,input_y):
    x=np.reshape(x,[1])
    y=np.reshape(y,[1])
    step = step +1
    with tf.GradientTape() as tape:
        loss = tf.losses.MeanSquaredError()(model(x),y)   #连续数据的预测,损失函数用MSE
    grads=tape.gradient(loss,[weight,bias])               #计算梯度
    opt.apply_gradients(zip(grads,[weight,bias]))         #更新参数weight和bias
    print("Step:",step,"Traing Loss:",loss.numpy())
    #用matplotlib可视化原始数据和预测的模型一
    plt.plot(input_x,input_y,'ro',label='original data')
    plt.plot(input_x,model(input_x),label='predicted value')
    plt.plot(input_x,2*input_x,label='y = 2x')
    plt.legend()
    plt.show()
    print(weight)
    print(bias)

 2)高阶API标准化搭建:基于tensorflow的iris数据集分类

import tensorflow as tf
import numpy as np
from sklearn.datasets import load_iris
data=load_iris()                                 # 读取数据集
iris_data = np.float32(data.data)                # 获取数据集中的鸢尾花4个属性
iris_target = data.target                        # 获取鸢尾花的类别
iris_target = tf.keras.utils.to_categorical(iris_target,num_classes=3) #标签转为one-hot标签
train_data = tf.data.Dataset.from_tensor_slices((iris_data,iris_target)).batch(128) #批量加载数据
inputs = tf.keras.layers.Input(shape=(4))        # 特征共有四维,所以输入为4
x=tf.keras.layers.Dense(32,activation='relu')(inputs)
x=tf.keras.layers.Dense(64,activation='relu')(x)
outputs=tf.keras.layers.Dense(3,activation='softmax')(x)
model=tf.keras.Model(inputs = inputs,outputs = outputs)
model.compile(optimizer=tf.optimizers.Adam(lr=1e-3),loss=tf.losses.categorical_crossentropy,
metrics=['accuracy']) #模型编译
model.fit(train_data,epochs=500)                 # 模型训练
score = model.evaluate(iris_data,iris_target)    # 模型评估
print("last score:",score)

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一些基于小数据集CNN模型参数优化技巧和对应的PyTorch代码实现: 1. 数据增强:通过对训练数据进行随机旋转、裁剪、平移等操作,增加数据集的多样性,提高模型的泛化能力。 ```python from torchvision import transforms # 定义数据增强 transform_train = transforms.Compose([ transforms.RandomRotation(20), transforms.RandomCrop(32, padding=4), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 加载数据集 train_data = ... test_data = ... train_data.transform = transform_train train_loader = DataLoader(train_data, batch_size=32, shuffle=True) test_loader = DataLoader(test_data, batch_size=32, shuffle=True) ``` 上述代码中,我们使用PyTorch自带的transforms模块定义了一些常用的数据增强操作,并将其应用到训练数据集上。具体包括随机旋转20度、随机裁剪32x32大小的图像(padding=4)、随机水平翻转、将图像转换为Tensor格式和归一化处理。然后我们将增强后的训练数据集和未增强的测试数据集分别加载到DataLoader中。 2. 学习率调整:通过在训练过程中动态调整学习率,提高模型的收敛速度和精度。 ```python # 定义学习率调整策略 scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1) # 训练模型 for epoch in range(50): running_loss = 0.0 for i, data in enumerate(train_loader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() scheduler.step() # 每个epoch结束后调整学习率 print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader))) ``` 上述代码中,我们使用PyTorch自带的optim.lr_scheduler模块定义了一个StepLR学习率调整策略,每10个epoch将学习率乘以0.1。然后在每个epoch结束后调用scheduler.step()方法,动态调整学习率。 3. 正则化:通过在损失函数中加入正则化项,控制模型参数的大小,防止过拟合。 ```python # 定义L2正则化损失函数 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001, weight_decay=0.0001) # 训练模型 for epoch in range(50): running_loss = 0.0 for i, data in enumerate(train_loader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) l2_loss = 0.0 for param in model.parameters(): l2_loss += torch.norm(param, 2) # 计算L2正则化项 loss += 0.0001 * l2_loss loss.backward() optimizer.step() running_loss += loss.item() print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader))) ``` 上述代码中,我们使用PyTorch自带的optim模块的weight_decay参数定义了一个L2正则化项,并在损失函数中加入该项。然后在训练过程中,每个batch结束后计算L2正则化项,并将其加到总损失上。 需要注意的是,上述代码只是一些常用的小数据集CNN模型参数优化技巧,实际应用中需要根据具体情况进行调整和优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值