Tensorflow笔记(二):常用函数2、激活函数、优化器等、神经网络模型实现(商品销量预测)

import tensorflow as tf
import numpy as np
from tqdm import tqdm# ----------------------------- tensor常用函数2 -----------------------------------
a = tf.constant([1, 2, 3, 1, 2])
b = tf.constant([0, 1, 3, 4, 5])
c = tf.where(tf.greater(a, b), a, b)  # 若a>b,返回a对应位置的元素,否则返回b对应位置的元素rdm = np.random.RandomState(seed=110)  # 设置种子保证每次生成的随机数相同
a = rdm.rand()  # 返回一个随即标量
b = rdm.rand(2, 3)  # 返回维度为2行3列的随机数矩阵a2 = np.array([1, 2, 3])
b2 = np.array([4, 5, 6])
c2 = np.vstack((a2, b2))  # 将数组按垂直方向叠加x, y = np.mgrid[1:3:1, 2:4:0.5]  # 返回若干组维度相同的等差数组,格式为:起始值:结束值:步长
grid = np.c_[x.ravel(), y.ravel()]  # ravel函数将多维数组变为一维数组,c_则是使返回的间隔数值点配对y_ = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 0]])  # 真实值(labels)
y = np.array([[12, 3, 2], [3, 10, 1], [1, 2, 5], [4, 6.5, 1.2], [3, 6, 1]])  # 预测值(logits)
# 可以直接用交叉熵损失函数计算
loss_ce = tf.nn.softmax_cross_entropy_with_logits(y_, y)
# 也可以先用softmax把y_转换成概率,然后再求交叉熵损失
y_pro = tf.nn.softmax(y)
loss_ce = tf.losses.categorical_crossentropy(y_, y_pro)# ----------------------------- 商品销量神经网络预测模型 -----------------------------------
epochs = 15000
lr = 0.005
seed = 110
cost = 1  # 成本1元
profit = 99  # 利润99元rdm = np.random.RandomState(seed)
x = rdm.rand(32, 2)
y_ = [[x1 + x2 + (rdm.rand() / 10 - 0.05)] for (x1, x2) in x]  # 用公式生成销量(带噪声)
x = tf.cast(x, dtype=tf.float32)w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=seed))for epoch in tqdm(range(epochs)):with tf.GradientTape() as tape:y = tf.matmul(x, w1)# 如果销量预测多了(y>y_)则浪费成本了,如果销量预测少了(y<y_)则利润少了loss = tf.reduce_sum(tf.where(tf.greater(y, y_), cost * (y - y_), profit * (y_ - y)))grads = tape.gradient(loss, w1)w1.assign_sub(lr * grads)if epoch % 500 == 0:print(f"after {epoch} training steps, w1 is {w1.numpy()}")
# 因为利润更大,所以最后参数的结果会尽量给出大于1的系数
# ----------------------------- 神经网络复杂度 -----------------------------------

# ---------------------------------------------- 学习率 ----------------------------------------------------

# ---------------------------------------------- 激活函数 ----------------------------------------------------

优秀的激活函数:
  非线性:激活函数非线性时,多层神经网络可逼近所有函数可微性:优化器大多用梯度下降更新参数
  单调性:当激活函数是单调的,能保证单层网络的损失函数是凸函数
  近似恒等性:f(x)≈x当参数初始化为随机小值时,神经网络更稳定
激活函数输出值的范围:
  激活函数输出为有限值时,基于梯度的优化方法更稳定
  激活函数输出为无限值时,建议调小学习率

关于激活函数的选择,对于初学者的建议:
    --首选relu激活函数:
    --学习率设置较小值;
    --输入特征标准化,即让输入特征满足以0为均值1为标准差的正态分布
    --初始参数中心化,即让随机生成的参数满足以0为均值,\sqrt{\tfrac{2}{feature-num}}为标准差的正态分布,其中feature-num表示当前层输入特征个数。

# ---------------------------------------------- 欠拟合与过拟合 -------------------------------------------------

欠拟合的解决方法:
    --增加输入特征项
    --增加网络参数
    --减少正则化参数
过拟合的解决方法:
    --数据清洗
    --增大训练集
    --采用正则化
    --增大正则化参数

# ---------------------------------------------- 优化器 -------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538083.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

采购代购系统独立站,接口采集商品上货

采购代购系统独立站的建设与商品上货接口的采集是一个综合性的项目&#xff0c;涉及前端开发、后端开发、数据库设计以及API接口的对接等多个环节。以下是一个大致的步骤和考虑因素&#xff1a; 一、系统规划与需求分析 明确业务需求&#xff1a;确定代购系统的核心功能&…

尚硅谷SpringBoot项目--微头条实战(有完整项目代码)

目录 项目模块 技术栈 功能展示 环境搭建 前端环境搭建&#xff1a; 后端环境搭建&#xff1a; 数据库创建&#xff1a; &#xff08;建议使用数据库软件操作&#xff09; springboot项目搭建&#xff1a; mybatis-plus逆向工程 后端功能开发 用户模块开发 jwt 与…

基于SpringBoot的“实验室管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“实验室管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 注册界面 实验室界面 设备界面图 消耗…

使用Python批量实现在Excel里新加一列

目录 一、引言 二、所需库介绍 三、代码实现 四、批量处理多个Excel文件 五、注意事项与扩展 六、案例演示 七、总结与展望 一、引言 Excel作为广泛使用的电子表格软件&#xff0c;在数据处理和分析中扮演着重要角色。然而&#xff0c;当面对大量Excel文件需要批量处理…

【六】【算法分析与设计】二分查找

69. x 的平方根 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示…

玩转 Spring 状态机:更优雅的实现订单状态流转

说起 Spring 状态机&#xff0c;大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢&#xff1f;没错&#xff0c;Spring 状态机就是状态模式的一种实现&#xff0c;在介绍 Spring 状态机之前&#xff0c;让我们来看看设计模式中的状态模式。 1. 状态模式 状态模式…

如何使用vue定义组件之——子组件调用父组件数据

1.定义父子模板template <div class"container"><my-father></my-father><my-father></my-father><my-father></my-father><!-- 此处无法调用子组件&#xff0c;子组件必须依赖于父组件进行展示 --><!-- <my-…

数据结构:图及相关算法讲解

图 1.图的基本概念2. 图的存储结构2.1邻接矩阵2.2邻接表2.3两种实现的比较 3.图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4.最小生成树4.1 Kruskal算法4.2 Prim算法4.3 两个算法比较 5.最短路径5.1两个抽象存储5.2单源最短路径--Dijkstra算法5.3单源最短路径--Bellman-…

【Git版本控制系统】:起步

目录 前言 版本控制 集中式与分布式的区别 Windows安装Git 核心 文件状态 工作区域 基本工作流程 配置用户信息 获取帮助 在线资源 前言 本篇文件的环境是Windows环境下实现。 在日常工作中git少不了&#xff0c;所以编写本篇文章介绍Git基础&#xff0c;专栏会不…

unicloud JQL数据库操作介绍

JQL数据库操作 JQL&#xff0c;全称 javascript query language&#xff0c;是一种js方式操作数据库的规范。 JQL大幅降低了js工程师操作数据库的难度&#xff0c;比SQL和传统MongoDB API更清晰、易掌握。JQL支持强大的DB Schema&#xff0c;内置数据规则和权限。DB Schema 支…

与结构数列顺序有关的两个方程组

已知一组4点的结构数列顺序为&#xff0c; 方程组41 (5*x1)/5.0r1 (2*x23*x3)/5.0r2 (4*x21*x8)/5.0r3 (3*x32*x5)/5.0r4 (5*x5)/5.0r5 (4*x31*x14)/5.0r6 (1*x13*x41*x16)/5.0r7 (2*x32*x71*x10)/5.0r8 (2*x53*x7)/5.0r9 (2*x23*x10)/5.0r10 (2*x42*x91*x11)/5.0r11…

Vue 中使用 v-for 渲染列表时绑定 key 的重要性

在 Vue.js 中&#xff0c;v-for 是一个常用的指令&#xff0c;用于渲染列表数据到页面上。然而&#xff0c;在使用 v-for 渲染列表时&#xff0c;绑定一个 key 是至关重要的实践之一。本文将详细介绍为什么在 Vue 中使用 v-for 渲染列表时绑定 key 是如此重要&#xff0c;并深入…