Tensorflow 基础与实战

news2024/10/7 8:25:21

目录

一、线性回归实现

1.1 数据加载与查看绘图

1.2 模型建立、训练与预测

二、神经网络实现

2.1 数据加载与查看绘图

2.2 模型建立、训练与预测

三、逻辑回归实现

3.1 数据加载与查看绘图

3.2 模型建立、训练与预测

四、softmax分类

4.1 数据加载

4.2 数据归一化

4.3 模型建立、训练与预测

4.4 独热编码(onehot)

4.5 优化函数、学习率、反向传播算法

4.5.1 学习率

4.5.2 优化函数

4.5.3 反向传播

五、网络优化、超参数与Dropout

5.1 网络容量

5.2 超参数

5.3 网络优化

5.4 softmax优化

5.5 Dropout(抑制过拟合)

六、基本操作

6.1 查看 tensorflow 版本

6.2 数据加载与查看

七、其他

7.1 激活函数

7.1.1 relu : 非负输出

7.1.2 sigmoid:输出(0, 1)

7.1.3 Sigmoid:适用二分类,设定阈值

7.1.4 softmax:输出 (0, 1),适用多分类,输出概率

7.1.5 tanh:输出[-1, 1]

7.1.6 Leak relu:将负值信号传递一点点出来,一般用在深层网络里

7.2 损失函数

7.2.1 交叉熵损失函数

7.3 优化函数

7.3.1 SGD

7.3.2 RMSprop

7.3.3 Adam

八、API解释

8.1 keras.layers.Dense


一、线性回归实现

1.1 数据加载与查看绘图

import pandas as pd
data = pd.read_csv('./tensorflow入门与实战-基础部分数据集/Income1.csv')

# 绘图认识一下

import matplotlib.pyplot as plt
%matplotlib inline    

# % 的是使用魔术方法,直接显示出来

plt.scatter(data.Education, data.Income)    # 绘制散点图,plt.scatter(x轴, y轴) 

1.2 模型建立、训练与预测

x = data.Education
y = data.Income


model = tf.keras.Sequential()   # 按Tab可以补全名称,Sequential顺序模型
model.add(tf.keras.layers.Dense(1, input_shape=(1,))) # 输出维度是1,输入数据的维度=(1,) 输入只有一个变量,逗号代表一个元组

model.summary()  # 反应模型形状, ax + b

# None的第一个维度代表样本的个数,第二个代表输出的维度
# 如Output Shape(50, 1)代表输出的是50个1维度的数据
# Param = 2表示有2个参数

# 编译, optimizer :优化方法; loss:损失函数; mse:均方差

model.compile(optimizer = 'adam',
              loss = 'mse'
)   


# 训练模型,用fit方法,用history记录下来
# epochs :迭代次数

history = model.fit(x, y, epochs=5000)

model.predict(x)

model.predict(pd.Series([20]))  # Series是一维数组

二、神经网络实现

2.1 数据加载与查看绘图

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

data = pd.read_csv('./tensorflow入门与实战-基础部分数据集/Advertising.csv')

plt.scatter(data.TV, data.sales)

plt.scatter(data.radio, data.sales)

2.2 模型建立、训练与预测

x = data.iloc[:, 1:-1]   # [:, 1:-1]是  第一个冒号是所有的行、1,-1是出去第一列和最后一列
y = data.iloc[:, -1]


model = tf.keras.Sequential([tf.keras.layers.Dense(10, input_shape=(3, ), activation='relu'),
                             tf.keras.layers.Dense(1)]   # 两层,第一层输出10个数据,太大容易过拟合,激活函数为:relu
)

model.summary()

model.compile(optimizer='adam',
              loss='mse'
)
# 输出是一个连续的值,所以也可以用均方差作为损失函数


model.fit(x, y, epochs=100)

test = data.iloc[:10, 1:-1]
model.predict(test)

origin = data.iloc[:10, -1]
origin

三、逻辑回归实现

3.1 数据加载与查看绘图

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

data = pd.read_csv('./tensorflow入门与实战-基础部分数据集/credit-a.csv')
data.head()    # head默认显示前5行,可以发现这数据集没有表头,所以要加上 header = None

data = pd.read_csv('./tensorflow入门与实战-基础部分数据集/credit-a.csv', header = None)
data.head()

# 查看最后一列中 1,-1 的个数
data.iloc[:, -1].value_counts()

3.2 模型建立、训练与预测

x = data.iloc[:, :-1]   # 所有的行,最后一列之前的
y = data.iloc[:, -1].replace(-1, 0) # replace将 -1 替换为 0

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4, input_shape=(15,),activation='relu'))       # 自己设置规定 第一层有4个单元数
model.add(tf.keras.layers.Dense(4, activation='relu')) 
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.summary()

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['acc']
)
# metrics 用来测量,这里用来测量 准确性(正确率)

history = model.fit(x, y, epochs=100)

history.history.keys()   # history.keys() 看有哪些字典,看到有loss和keys的变化

四、softmax分类

4.1 数据加载

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

(train_image, train_label), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()

# 下载的数据集在 C:\Users\name\keras\datasets\fashion-mnist

4.2 数据归一化

train_image = train_image/255
test_image = test_image/255

4.3 模型建立、训练与预测

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))  # 28*28的向量
model.add(tf.keras.layers.Dense(128, activation='relu'))                    # 128个隐藏单元,不能太小因为数据挺大,不过太大会过拟合
model.add(tf.keras.layers.Dense(10, activation='softmax'))

# Dense 是把一维映射到另一个一维中
# 而这里图片是 28×28 的,所以要把这个二维的变为一维,用Flatten

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc']
)

model.fit(train_image, train_label, epochs=5)

model.evaluate(test_image, test_label)

4.4 独热编码(onehot)

        独热编码是数值化的一种方法,比如说有3个城市,北京、上海、南京,将其编码成0、1、2

也可以编码成维度一样的,如北京就是 [1, 0, 0] , 其他 [0, 1, 0] ,[0, 0, 1]

train_label_onehot = tf.keras.utils.to_categorical(train_label)

test_label_onehot = tf.keras.utils.to_categorical(test_label)

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['acc']
)

model.fit(train_image, train_label_onehot, epochs=5)

predict = model.predict(test_image)

4.5 优化函数、学习率、反向传播算法

4.5.1 学习率

4.5.2 优化函数

4.5.3 反向传播

参考:

深度学习——反向传播(Backpropagation)_南方惆怅客的博客-CSDN博客_反向传播

反向传播是什么?通俗易懂的解释!!!_一个小呆苗的博客-CSDN博客_反向传播

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
              loss='categorical_crossentropy',
              metrics=['acc']
)
 # shift + Tab 显示函数的参数

五、网络优化、超参数与Dropout

5.1 网络容量

5.2 超参数

5.3 网络优化

5.4 softmax优化

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

(train_image, train_label), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()

train_image = train_image/255
test_image = test_image/255

train_label_onehot = tf.keras.utils.to_categorical(train_label)
test_label_onehot = tf.keras.utils.to_categorical(test_label)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))  # 28*28的向量
model.add(tf.keras.layers.Dense(128, activation='relu'))                    # 128个隐藏单元,不能太小因为数据挺大,不过太大会过拟合
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

model.summary()

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
              loss='categorical_crossentropy',
              metrics=['acc']
)

history = model.fit(train_image, train_label_onehot, epochs=10,
                    validation_data=(test_image, test_label_onehot)
) # 用 validation_data 就不仅可以看到在 训练集 上的准确率,还可以看大在 测试集 上的准确率

history.history.keys()

plt.plot(history.epoch, history.history.get('loss'), label='loss')
plt.plot(history.epoch, history.history.get('val_loss'), label='val_loss')
plt.legend()

plt.plot(history.epoch, history.history.get('acc'), label='acc')
plt.plot(history.epoch, history.history.get('val_acc'), label='val_acc')
plt.legend()

5.5 Dropout(抑制过拟合)

        dropout本质上随机丢弃一些单元,训练的时候丢弃,测试的时候使用全部的

为什么说Dropout可以解决过拟合? 

       类似于生物学里面的适者生存理论,打破神经元之间的联合依赖性,迫使每个神经元学习到不同的信息,这样一来,网络即可以减小过拟合,也可以在一定程度上增强模型的鲁棒性

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))  # 28*28的向量
model.add(tf.keras.layers.Dense(128, activation='relu'))                  # 128个隐藏单元,不能太小因为数据挺大,不过太大会过拟合
model.add(tf.keras.layers.Dropout(0.5))                                   # 这里是 rate 参数,每次激活 0.5也就是50%
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

六、基本操作

6.1 查看 tensorflow 版本

print('TensorFlow Version:{}'.format(tf.__version__))
TensorFlow Version:2.1.0

6.2 数据加载与查看

data = pd.read_csv('./tensorflow入门与实战-基础部分数据集/Income1.csv')

查看前5行数据 

data.head()

七、其他

7.1 激活函数

7.1.1 relu : 非负输出

7.1.2 sigmoid:输出(0, 1)

7.1.3 Sigmoid:适用二分类,设定阈值

7.1.4 softmax:输出 (0, 1),适用多分类,输出概率

7.1.5 tanh:输出[-1, 1]

7.1.6 Leak relu:将负值信号传递一点点出来,一般用在深层网络里

7.2 损失函数

7.2.1 交叉熵损失函数

当label使用数字编码时,损失函数用sparse_categorical_crossentropy

label用独热编码时,用categorical_crossentropy

7.3 优化函数

7.3.1 SGD

 参数:

7.3.2 RMSprop

参数: 

        RMSprop 处理序列问题会比较好

7.3.3 Adam

参数:

        lr: learning rate(学习速率)

八、API解释

8.1 keras.layers.Dense

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

参数解释如下(黑体为常用参数):

units :代表该层的输出维度神经元个数, units解释为神经元个数为了方便计算参数量,解释为输出维度为了方便计算维度
activation=None:激活函数.但是默认 liner (详见API的activation)
use_bias=True:布尔值,该层是否使用偏置向量b
kernel_initializer:初始化w权重 (详见API的initializers)
bias_initializer:初始化b权重 (详见API的initializers)
kernel_regularizer:施加在权重w上的正则项 (详见API的regularizer)
bias_regularizer:施加在偏置向量b上的正则项 (详见API的regularizer)
activity_regularizer:施加在输出上的正则项 (详见API的regularizer)
kernel_constraint:施加在权重w上的约束项 (详见API的constraints)
bias_constraint:施加在偏置b上的约束项 (详见API的constraints)



Keras中dense层原理及用法解释_66Kevin的博客-CSDN博客_dense层

未完,自用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ReadyAPI x64bit 3.43.0 Crack

ReadyAPI 允许团队在一个集中的界面中创建、管理和执行自动化的功能、安全和性能测试——为敏捷和 DevOps 软件团队提高 API 质量。 ReadyAPI 在单一平台上提供三个模块: 在ReadyAPI 测试模块中,您创建功能测试以验证您的服务是否按预期工作。您可以使用…

高频数组算法

1.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输…

程序员的职业生涯个人规划(附上学习资料)

目录 前言 1.程序员的规划 2.程序员的进化路径 3.IT行业的难度 4.你的选择 5.再谈谈资本、工具人和内卷 总结: 前言 今天不讲技术也不讲干货,来聊一聊程序员职业生涯的个人规划。希望对不管是想入门的还是已经在这条路上的朋友能有一个帮助。 1.程…

opencv之直方图绘制及均衡化

直方图均衡化优势:增强图像对比度,使对比度较低的局部区域获得高对比度。当图像非常暗或者非常亮,并且背景和前景之间的差异非常小时,此方法非常有效,能够解决暴露过度或暴露不足的问题。直方图均衡化缺陷:…

多彩的书写工具,画图写字更好看,米家液晶小黑板多彩版上手

平时临时记些信息,或者是教小朋友认字的时候,液晶小黑板都是特别实用的工具,我之前就用过米家液晶小黑板,最近我发现米家新出了一款彩色笔迹的小黑板,书写效果更加好看,比以前单色款的更好用。 这款米家液晶…

【技术分享】MA21日均线交易策略

文章目录1.前言1.1.相关术语1.2.MA均线系统设置分类1.3.斐波那契数列2.MA21日均线2.1.MA21日均线2.2.MA21日均线交易策略2.3.MA21日均线案例分析1.前言 1.1.相关术语 空头市场(Bear Market):亦称熊市,指价格长期呈 下跌 趋势的证…

操作系统权限提升(十)之系统错误配置-计划任务提权

系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 操作系统权限提升(三)之Windows系统内核溢出漏洞提权 操作系统权限提升(四)之系统错误配置-Tusted Service Paths提权 操作系统权限提升(五)之系统错误配置-PATH环境变量提权 操作…

VUE3.0学习

一、父子传值 父组件向子组件传值和vue2.0相比区别不大&#xff0c;区别在于api的使用&#xff0c;让接收参数的写法多样化。父组件::::: <template><div class"about"><div><main><TheWelcome :info"parMsg"/></main>…

【react】理解Fiber

FiberFiber概念结构Fiber 树的遍历是这样发生的【深度遍历】。window.requestIdleCallback()requestAnimationFrameFiber 是如何工作的结论有react fiber&#xff0c;为什么不需要vue fiberFiber 概念 JavaScript引擎和页面渲染引擎两个线程是互斥的&#xff0c;当其中一个线…

12月 被大厂以“人员优化”的名义 无情的辞退了...

前几天&#xff0c;一个认识了好几年在大厂工作的测试员朋友&#xff0c;年近30了&#xff0c;却被大厂以“人员优化”的名义无情被辞&#xff0c;据他说&#xff0c;有一个月散伙饭都吃了好几顿…… 在很多企业&#xff0c;都有KPI考核&#xff0c;然后在此基础上还会弄个“…

IB EE 学习干货,从选学科/课题/写稿/对稿/交稿几个方面入手分享

本文从选学科&#xff0c;选课题&#xff0c;写稿&#xff0c;对稿&#xff0c;交稿几个方面入手分享。关于不同学科的EE&#xff0c;本文涵盖了数学和物理EE&#xff08;因为我们猜很多同学们都选了这两个学科的EE&#xff09;。 文中分享的学习方法都是我们从个人经历出发&am…

微服务 @SentinelResource 服务网关

微服务 SentinelResource 服务网关SentinelResourceFeign整合Sentinel什么场景下需要Feign集合Sentinel呢&#xff1f;服务网关为什么需要网关网关组件Gateway快速入门什么是Gateway操作示例自定义路由规则SentinelResource 自定义异常返回是对所有的情况进行统一处理&#xf…

DTC补货实战:从算法到落地

本文作者&#xff1a;凡飞&#xff0c;从快递到快消&#xff0c;一个平凡的供应链算法深耕者。“ 我希望衡量我们ai团队价值的&#xff0c;不是创造了多么精深的算法&#xff0c;而是跨越算法到落地间距离的能力。”近年来随着电商行业从增量市场逐步成长到了存量市场&#xff…

第二章.神经网络—激活函数

第二章.神经网络 感知机存在如何设置合适的权重问题&#xff0c;神经网络的出现就是为了解决感知机存在的问题&#xff0c;神经网络的一个重要性质&#xff1a;它可以自动的从数据中学习到合适的权重参数。 2.1.从感知机到神经网络 1.神经网络示例 1).示意图&#xff1a; 网络…

《技术领导力:程序员如何才能带团队》 读书笔记

技术管理工作 管理者能力 作为技术团队管理者&#xff0c;无论具体管几个人&#xff0c;最好能够拥有以下能力&#xff0c;才能满足各个需求方提出的需求&#xff1a; 深入理解一门或多门编程语言深入理解多种流行的框架系统架构能力强&#xff0c;拥有复杂系统的设计经验积…

Hystrix高可用框架

Hystrix是什么 Hystrix Home,Hystrix是高可用性保障的一个框架。Netflix的API团队从2011年开始做一些提升系统可用性和稳定性的工作,Hystrix就是从那时候开始发展的。在2012年的时候,Hystrix就变得比较成熟和稳定了,Netflix中除了API团队以外,很多其他的团队都开始使用Hy…

vue2.6.10+vite2开启template模板动态编译

在从vue-cli迁移到vite2的时候&#xff0c;之前在代码中使用的模板编译遇到了问题&#xff1a;我在项目中会根据后台返回的内容动态渲染&#xff0c;如果返回内容中有<el-image>等标签&#xff0c;v-html无法识别非html标签&#xff0c;导致图片渲染失败&#xff0c;因此…

基于Springboot搭建java项目(三十二)—— Docker部署java服务

Docker部署java服务 一、Linux服务安装Docker 关于Docker的安装在之前的Linux的三种安装方式的第三种安装方式中有介绍 传送门&#xff1a;https://blog.csdn.net/m0_46616045/article/details/128841396 二、编写DockerFile 1、将需要部署的Jar包放到服务器上 2、编写Doc…

3.【SpringBoot源码】SpringBoot自动配置原理

目录 一、简介 1)、SpringBootConfiguration 2)、ComponentScan 3)、EnableAutoConfiguration 二、AutoConfigurationPackage 三、Import(AutoConfigurationImportSelector.class) 1)、AutoConfigurationImportSelector介绍 2)、自动配置流程 2-1)、ConfigurationClas…

Vue中数组的列表渲染(v-for渲染数组,数组改变,页面不渲染问题)

1.基本的列表&#xff08;v-for的基本使用&#xff09;&#xff1a; <template><!-- v-for指令:1.用于展示列表数据2.语法&#xff1a;v-for"(item, index) in xxx" :key"yyy"3.可遍历&#xff1a;数组、对象、字符串&#xff08;用的很少&#…