admin管理员组文章数量:1794759
tensorflow
通过本博客,一步一步教你搭建自己的神经网络,史上最详细,最简单的神经网络搭建步骤。 案列中使用的网络结构简单,如下图所示:
1.代码展示
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):# 定义withwith tf.GradientTape() as tape:y = tf.matmul(x_train, w1) + b1y = 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为测试的个数,初始全部为0total_correct, total_number = 0, 0for x_test, y_test in test_db:# 使用更新后的参数进行预测y = tf.matmul(x_test, w1) + b1y = 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]# 计算accacc = 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()
2.结果展示
迭代500次后的损失函数图,还有测试集的精确度(测试集使用30%,训练集70%):
3.多层神经网络:
关于多层神经网络的搭建方法和技巧,资源下载:Tensorflow-学习笔记.rar-机器学习文档类资源-CSDN下载
本文标签: tensorflow
版权声明:本文标题:tensorflow 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1692508589a140770.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论