首页 > 分享 > tensorflow

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):

# 定义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()

2.结果展示 

       迭代500次后的损失函数图,还有测试集的精确度(测试集使用30%,训练集70%):

 

3.多层神经网络: 

 关于多层神经网络的搭建方法和技巧,资源下载: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算法对鸢