【TensorFlow】基础教程

本文是 TensorFlow 学习教程,涵盖运行环境设置、线性回归、多层感知器(包括原理和激活函数)、逻辑回归、softmax 多分类、优化函数、学习率、反向传播、Dropout 以及函数式 API 的使用。通过实例展示了如何在 TensorFlow 中构建和训练模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为 TensorFlow 学习笔记,讲解 TensorFLow 基础操作。欢迎在评论区与我交流👏

运行环境

  • Mac OS X
  • TensorFlow 2.3.1
  • Jupyter Notebook

使用下面的命令检查 Tensorflow 是否安装成功及版本:

import tensorflow as tf
print('Tensorflow Version: {}'.format(tf.__version__))

线性回归

关于线性回归的详细讲解见【线性回归模型】。

我们通常认为,受教育年限和收入是线性关系,这里用两者的关系进行线性回归拟合。

首先读取数据集并打印:

import pandas as pd
data = pd.read_csv('./dataset/Income1.csv')
data

输出结果:

在这里插入图片描述

然后绘制出数据集:

import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(data.Education, data.Income) # 绘制散点图

绘制结果如下。横轴为受教育年限,竖轴为收入:

在这里插入图片描述

使用顺序模型进行搭建,顺序模型(Sequential)即一个输入和一个输出,使用 Dense 建立线性回归模型:

x = data.Education
y = data.Income
model = tf.keras.Sequential() # 声明模型
# 使用 Dense 建立线性回归模型,参数为 (输出维度, 输入维度),输入维度用元组表示
model.add(tf.keras.layers.Dense(1, input_shape=(1,)))
model.summary() # 打印模型结构

输出结果:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)              (None, 1)                 2         
=================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________

其中 None 代表模型个数,建立模型时无需考虑。Param 为参数个数,这里为 2,将输入 x 变为 ax + b。

接下来编译模型:

model.compile(optimizer='adam', # 使用 adam 梯度下降方法,学习率默认为 0.01
              loss='mse' # 均方差
)

然后使用 fit 方法训练模型:

# epochs 表示对所有数据的训练次数
history = model.fit(x, y, epochs=5000)

训练结果为:

Epoch 1/5000
1/1 [==============================] - 0s 1ms/step - loss: 834.3466
...
Epoch 5000/5000
1/1 [==============================] - 0s 747us/step - loss: 104.9437

使用 model 对数据集本身进行预测:

# 格式为 pd.Series
model.predict(x)

输出结果为:

在这里插入图片描述

则受教育年限为 20 时:

model.predict(pd.Series([20]))

输出结果:

array([[64.86565]], dtype=float32)

多层感知器

原理

线性回归模型是单个神经元。计算输入特征 x x x 的加权和,然后使用激活函数计算输出。

单个神经元(二分类):

在这里插入图片描述

多个神经元(多分类):

在这里插入图片描述

上面的神经元都是单层的,无法拟合 “异或” 运算。神经元要求数据必须是线性可分的,而异或问题无法找到一条直线分割两个类。这也是神经网络发展停滞了多年的原因。

多层感知器,可以拟合非线性问题:

在这里插入图片描述

激活函数

Relu 激活

在这里插入图片描述

sigmoid 激活:

在这里插入图片描述

tanh 激活:

在这里插入图片描述

Leak relu 激活,多用于生成网络

在这里插入图片描述

实现

首先引入包:

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

读取数据集并打印结果:

data = pd.read_csv('dataset/Advertising.csv')
data.head()

打印结果:

在这里插入图片描述

作出 TV 与 销量的散点图:

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

得到图像如下,很明显为线性关系:

在这里插入图片描述

建立模型,使用列表形式直接将层定义在 Sequential 中,无需写 add:

# x 对应中间 3 列特征
# 取所有的行,并除去第一列和最后一列
x = data.iloc[:, 1: -1]
# y 取最后一列
y = data.iloc[:, -1]

# 建立多层感知器,中间需添加一层,然后再添加输出
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, input_shape=(3,), activation='relu'), # 隐藏层 10 个单元,并添加激活函数
    tf.keras.layers.Dense(1)] # 输出维度为 1 
)
model.summary() # 打印神经网络结构

输出结果如下,中间层有 10 个隐藏单元:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 10)                40        
_________________________________________________________________
dense_1 (Dense)              (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值