通过本博客,一步一步教你搭建自己的神经网络,史上最详细,最简单的神经网络搭建步骤。 案列中使用的网络结构简单,如下图所示:

怎样用spss进行神经网络预测数据 spss 神经网络教程_人工智能

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

怎样用spss进行神经网络预测数据 spss 神经网络教程_人工智能_02

 

怎样用spss进行神经网络预测数据 spss 神经网络教程_python_03

3.多层神经网络: