通过本博客,一步一步教你搭建自己的神经网络,史上最详细,最简单的神经网络搭建步骤。 案列中使用的网络结构简单,如下图所示:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 通过sklearn 导入数据集
from sklearn import datasets
# 1.获取数据集
x_data = datasets.load_iris().data
y_data = datasets.load_iris().target
# 2.打乱数据集
np.random.seed(116)
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)
# 3.数据集划分,划分成为训练集和测试集,一般百分之三十为测试集,百分之七十为训练集
# 获取数据的样本个数
data_num = x_data.shape[0]
x_train = x_data[:int(data_num * 0.7)]
y_train = y_data[:int(data_num * 0.7)]
x_test = x_data[int(data_num * 0.7):-1]
y_test = y_data[int(data_num * 0.7):-1]
# 4.转换一下数据类型
x_train = tf.cast(x_train, tf.float32)
x_test = tf.cast(x_test, tf.float32)
# 5.标签配对,利用from_tensro_slices函数,簇的大小设置成32
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)
# 6.生成神经网络参数,输入层四个节点,输出层,三个节点
# 使用tf.Variable()意思是可训练变量
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_result = [] # 记录每一轮训练过后的loss值,最后用于可视化
test_acc = [] # 记录每一轮的acc,最后可视化
epochs = 500 # 定义迭代循环的次数
loss_all = 0 # 每轮4个step,loss_all记录四个step生成的loss
# 开始进行训练
for epoch in range(epochs):
# 利用枚举从里面取出数据,每次取32条,完成一次epoch 需要取四次
for step, (x_train, y_train) in enumerate(train_db):
# 定义with
with tf.GradientTape() as tape:
y = tf.matmul(x_train, w1) + b1
y = tf.nn.softmax(y)
y_ = tf.one_hot(y_train, depth=3)
loss = tf.reduce_mean(tf.square(y_ - y))
loss_all += loss.numpy()
# 计算各个参数的梯度
grads = tape.gradient(loss, [w1, b1])
# 对各个参数进行梯度更新
w1.assign_sub(lr * grads[0])
b1.assign_sub(lr * grads[1])
# 打印每次的loss值
print("Epoch:{},loss{}".format(epoch, loss_all / 4))
train_loss_result.append(loss_all / 4)
loss_all = 0
# 测试部分
# 其中total_correct为测试正确的个数,total_number为测试的个数,初始全部为0
total_correct, total_number = 0, 0
for x_test, y_test in test_db:
# 使用更新后的参数进行预测
y = tf.matmul(x_test, w1) + b1
y = tf.nn.softmax(y)
# 获取y中值最大的索引
pred = tf.argmax(y, axis=1)
pred = tf.cast(pred, dtype=y_test.dtype)
# 若分类正确则为1,否则为0,将bool类型转换为int类型
correct = tf.cast(tf.equal(pred,y_test),dtype=tf.int32)
# 将每个batch的correct进行求和
correct = tf.reduce_sum(correct)
# 将所有的batch里面的correct求和
total_correct+=int(correct)
# 计算样本总数
total_number += x_test.shape[0]
# 计算acc
acc = total_correct / total_number
# 将acc保存在test_acc中
test_acc.append(acc)
print("test_acc:{}".format(acc))
print("-------------------------------")
# 绘制loss曲线和acc曲线
# 设置标题名字
plt.title("Loss Function Curve")
# x轴刻度含义
plt.xlabel('Epoch')
# y轴刻度含义
plt.ylabel('Loss')
# 绘制折现统计图
plt.plot(train_loss_result,label="$Loss$")
# 添加图列
plt.legend()
plt.show()
plt.title("ACC")
plt.xlabel("Epoch")
plt.ylabel("Acc")
plt.plot(test_acc,label="$ACC$")
plt.legend()
plt.show()
迭代500次后的损失函数图,还有测试集的精确度(测试集使用30%,训练集70%):
关于多层神经网络的搭建方法和技巧,资源下载:Tensorflow-学习笔记.rar-机器学习文档类资源-CSDN下载
相关知识
TensorFlow入门
TensorFlow学习记录(八)
【实战】tensorflow 花卉识别
[tensorflow]图片新类别再训练
花卉识别(tensorflow)
基于tensorflow的花卉识别
Windows安装TensorFlow教程(国内源安装附上各大镜像网站网址)
基于TensorFlow Lite实现的Android花卉识别应用
使用TensorFlow给花朵分类
深度学习之基于Tensorflow卷积神经网络花卉识别系统
网址: tensorflow https://m.huajiangbk.com/newsview387283.html
上一篇: “None of [Int64I |
下一篇: 用python实现KNN算法对鸢 |