一、实验目的及要求
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)