5.搭建两层网络

跟前面的没什么差别,搭建两层网络就初始化两层网络的参数就好了

1. 自己初始化参数模型那些,巴拉巴拉巴拉************
会用到前面的训练、预测、评估部分函数,复制过来就好了
没有***d2l***库的话安装就好了
!pip install d2l

import tensorflow as tf
from d2l import tensorflow as d2l

# 分批载入数据集
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

# 初始化模型参数
# 建立两层网络
# 还是使用Fashion-MNIST数据集,y = X * W + b
# 输入图片尺寸28*28 拉成一维后就是784,10类所以最后层输出为10,
# 中间层的神经元数量设置为256,神经元数量最好设置为2的若干次幂
num_inputs, num_outputs, num_hiddens = 784, 10, 256

W1 = tf.Variable(tf.random.normal(shape=(num_inputs, num_hiddens), mean=0, stddev=0.01))
b1 = tf.Variable(tf.zeros(num_hiddens))
W2 = tf.Variable(tf.random.normal(shape=(num_hiddens, num_outputs), mean=0, stddev=0.01))
b2 = tf.Variable(tf.zeros(num_outputs))
# 参数
params = [W1, b1, W2, b2]

# 多层网络如果不增加激活函数就退化成了单层网络
# 激活函数是为了增加网络的非线性,这里使用的是ReLU
# 通常接在卷积层之后
def relu(X):
  return tf.math.maximum(X, 0)

# 建立模型,搭建两层网络模型
def net(X):
  X = tf.reshape(X, (-1, num_inputs))
  H = relu(tf.matmul(X, W1) + b1)
  return tf.matmul(H, W2) + b2

# 定义损失函数,使用交叉熵损失
def loss(y_hat, y):
  return tf.losses.sparse_categorical_crossentropy(y, y_hat, from_logits=True)

##########################################################
# 下面部分跟之前的代码一毛一样
##########################################################
# 分类精度 统计正确的数量 精度:accuracy(y_hat, y) / len(y)
def accuracy(y_hat, y):
  if len(y_hat.shape) > 1 and y_hat.shape[1] > 1:
    y_hat = tf.argmax(y_hat, axis=1)
  cmp = tf.cast(y_hat, y.dtype) == y
  return float(tf.reduce_sum(tf.cast(cmp, y.dtype)))

def evaluate_accuracy(net, data_iter): 
  metric = Accumulator(2)  # 正确预测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值