标签:练习 put php line file 编写 time task strong
from sklearn import datasets import numpy as np import tensorflow as tf import pandas as pd from pandas import DataFrame from sklearn.datasets import load_iris from matplotlib import pyplot as plt x_data=datasets.load_iris().data #获取iris数据集数据 y_data=datasets.load_iris().target #获取iris数据标签 # x_data=DataFrame(x_data,columns=[‘花萼长度‘,‘花萼宽度‘,‘花瓣长度‘,‘花瓣宽度‘]) #把数据变成表格的形式,增加列标签 # pd.set_option(‘display.unicode.east_asian_width‘,True) #设置列名对齐 # print(‘x_data add index:\n‘,x_data) # # x_data[‘类别‘]=y_data #表格新加一列‘类别’ # print(‘x_data add column:\n‘,x_data) #随机打乱数据(因为原始数据是顺序的,顺序不打乱会影响准确率) #seed:随机数种子,是一个整数,当设置后,每次生成的随机数都一样 np.random.seed(116) np.random.shuffle(x_data) #重新排序返回一个随机序列作用类似洗牌 np.random.seed(116) np.random.shuffle(y_data) tf.random.set_seed(116) #将打乱后的数据集分割为训练集和测试集 #训练集为前120行,测试集为后30行 x_train=x_data[:-30] y_train=y_data[:-30] x_test=x_data[-30:] y_test=y_data[-30:] #转化x的数据类型,否则后面矩阵相乘时会因数据类型不一致报错 x_train=tf.cast(x_train,tf.float32) x_test=tf.cast(x_test,tf.float32) #把数据集分批次,每个批次batch组数据 #from_tensor_sices函数使输入特征和标签值一一对应 train_db=tf.data.Dataset.from_tensor_slices((x_train,y_train)).batch(32) test_db=tf.data.Dataset.from_tensor_slices((x_test,y_test)).batch(32) #生成神经网络的参数,4个输入特征,故输入层为4个输入节点;因为分3类,故输出层为3个神经元 #用tf.Vairable()标记参数可训练 #使用seed使每次生成的随机数相同 w1=tf.Variable(tf.random.truncated_normal([4,3],stddev=0.1,seed=1)) b1=tf.Variable(tf.random.truncated_normal([3],stddev=0.1,seed=1)) #学习率 lr=0.1 train_loss_results=[] #将每次的loss记录在此列表中,为后续画loss曲线提供依据 test_acc=[] #将每次的精确率记录在此列表中,为后续画acc曲线提供依据 epoch=500 #循环500次 loss_all=0 #每轮分为4个step,loss_all记录4个step生成的4个loss的和 #训练部分 for epoch in range(epoch): #大循环,循环一次数据集 for step,(x_train,y_train) in enumerate(train_db): #小循环,循环取一个batch(32个数据集) with tf.GradientTape() as tape: #with结构记录梯度信息 y=tf.matmul(x_train,w1)+b1 #神经网络记录乘加运算 y=tf.nn.softmax(y) #使y满足概率分布 y_=tf.one_hot(y_train,depth=3) #3分类 loss=tf.reduce_mean(tf.square(y_-y)) #预测值-真实值 loss_all+=loss.numpy() #求导 grads=tape.gradient(loss,[w1,b1]) #梯度自更新 w1=w1-lr*w1_grad b1=b1-lr*b1_grad w1.assign_sub(lr * grads[0]) b1.assign_sub(lr * grads[1]) #每个epoch,打印loss信息 print(‘epoch:{},loss:{}‘.format(epoch,loss_all/4)) train_loss_results.append(loss_all/4) loss_all=0 total_corret,total_number=0,0 for x_test,y_test in test_db: y=tf.matmul(x_test,w1)+b1 y=tf.nn.softmax(y) predict=tf.argmax(y,axis=1) #返回y中最大值的索引,即预测的分类 predict=tf.cast(predict,dtype=y_test.dtype) correct=tf.cast(tf.equal(predict,y_test),dtype=tf.int32) correct=tf.reduce_sum(correct) #将每个batch中的correct数加起来 total_corret+=int(correct) total_number+=x_test.shape[0] #x_test.shape[0]代表样本个数 acc=total_corret/total_number test_acc.append(acc) print(‘test_acc:‘,acc) print(‘------------------‘) #绘制loss曲线 plt.title(‘loss function curve‘) plt.xlabel(‘epoch‘) plt.ylabel(‘loss‘) plt.plot(train_loss_results,label=‘$loss$‘) plt.legend() plt.show() #绘制acc曲线 plt.title(‘acc curve‘) plt.xlabel(‘epoch‘) plt.ylabel(‘loss‘) plt.plot(test_acc,label=‘$accuracy$‘) plt.legend() plt.show()
标签:练习 put php line file 编写 time task strong
原文地址:https://www.cnblogs.com/chenweibo/p/13455338.html