TensorFlow——深度学习基础和tf.keras

tf.keras-核心高阶 API

均方差:(f(x)-y)2/n

顺序模型—Sequential:一个输入一个输出
层:Dense

CSV(逗号分隔值文件格式)

  • 有时也称为字符分隔值,因为分隔字符也可以不是逗号;
  • 以纯文本形式存储表格数据(数字和文本);
  • CSV文件由任意数目的记录组成,记录间以某种换行符分隔;
  • 每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符;
  • 开头是不留空,以行为单位;
  • 可含或不含列名,含列名则居文件第一行。

示例:依据受教育年限预测工资

Jupyter Notebook

import tensorflow as tf # 引入tensorflow框架并简写为tf
print('TensorFlow Version:{}'.format(tf.__version__)) # 打印查看tensorflow的版本号
import pandas as pd # 引入pandas并简记为pd
data = pd.read_csv('Income1.csv') #将文件中的数据读取到DataFrame中
data
import matplotlib.pyplot as plt # 引入matplotlib绘图,简记为plt
%matplotlib inline # 直接在python console中生成图像
plt.scatter(data.Education,data.Income) # 根据x,y数据绘制散点图
x=data.Education
y=data.Income
model = tf.keras.Sequential() # 选择模型Sequential:层的线性叠加
model.add(tf.keras.layers.Dense(1,input_shape=(1,))) # 添加层
model.summary()# 模型结构
model.compile(optimizer='adam',loss='mse')# optimizer:优化方法  loss:损失函数
history = model.fit(x,y,epochs=5000) # epochs:所有数据的训练次数
model.predict(x) # 预测
model.predict(pd.Series([20])) # 预测

多层感知器

在这里插入图片描述

感知器(指单层感知器)具有一定的局限——无法解决异或问题,即线性不可分的问题。
将多个单层感知器进行组合,就可以得到一个多层感知器(MLP——Multi-Layer Perceptron)结构。 多层感知器包含输入层,一个或多个隐藏层以及一个输出层。每层的神经元与下一层进行完全连接。
如果网络中包含一个以上的隐藏层,则称其为深度人工神经网络。
说明:

  • 通常我们说的神经网络的层,指具有计算的层,因为输入层没有计算,因此,通常输入层不计入神经网络的层次。
  • 多层感知器(深度神经网络)可以解决线性不可分问题。

激活函数

在神经网络中,激活函数用来为每一个结点(神经元)定义输出,该输出可以作为下一个结点(神经元)的输入。
作用: 激活函数提供网络的非线性建模能力。如果不使用激活函数,即使是多层神经网络,也无法解决线性不可分的问题。
** 常见激活函数:**

  • 阶跃函数

  • sigmoid函数
    在这里插入图片描述

  • tanh函数
    在这里插入图片描述

  • relu函数
    在这里插入图片描述

  • Leak relu
    在这里插入图片描述

示例:依据宣传途径预测销量

Jupyter Notebook

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

data = pd.read_csv("Advertising.csv")
data.head() # 打印前5行数据
plt.scatter(data.TV,data.sales) # 绘制散点图
plt.scatter(data.radio,data.sales)
plt.scatter(data.newspaper,data.sales)
x=data.iloc[:,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个,输入的维度为3维,激活函数为relu,输出维度为1维
model.summary() # 查看网络结构
model.compile(optimizer='adam',loss='mse') # 配置训练模型
model.fit(x,y,epochs=100)  # 训练模型
test = data.iloc[:10,1:-1] # 取10行除去第一列和最后一列的数
model.predict(test) # 使用模型对数据进行预测

逻辑回归

逻辑回归给出的是“是”和“否”的回答
使用sigmoid函数作为损失函数,sigmoid是一个概率分布函数,输出为一个概率值

示例

在这里插入图片描述在这里插入图片描述在这里插入图片描述

交叉熵

刻画实际输出(概率)与期望输出(概率)的距离。

softmax多分类

  • softmax要求每个样本必须属于某个类别,且所有可能的样本均被覆盖
  • 样本分量之和为1
  • 只有两个类别时 ,运算结果与对数回归相同
  • 多分类问题的损失函数使用categorical_crossentropy<label读热编码>和sparse_categorical_crossentropy<label使用顺序编码>计算交叉熵

Fashion MINIST数据集

手写数字图像数据集,包含70000张灰度图像,涵盖10个类别。

学习速率(超参数)

手动配置参数
合适的学习速率,损失函数随时间下降不合适的学习速率,损失函数可能会发生震荡

反向传播算法

一种高效计算数据流图中梯度的技术,每一层的导数都是后一层的导数与前一层输出之积

网络容量

  • 可以认为与网络中的可训练参数成正比。
  • 网络中的神经单元数越多,层数越多,神经网络的拟合能力越强。但是训练速度、难度越大,越容易产生过拟合。
  • 增加网络容量可以增加中间隐含层和隐藏神经元个数

提高网络的拟合能力

  • 单纯增加神经元个数对于网络性能的提高并不明显
  • 增加层会大大提高网络的拟合能力
    注意:
    单层神经元个数不能太小,太小会造成信息瓶颈和,使得模型欠拟合。

过拟合

loss值不下降反而上升
在训练数据上得分很高,在测试数据上得分较低
抑制过拟合: 增加训练数据、减小网络容量(最好办法)
1.Dropout
2.正则化
3.图像增强

欠拟合

在训练数据上得分较低,在测试数据上得分较低

交叉验证

在这里插入图片描述

示例在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数式API

可以实现多输入多输出模型

示例

from tensorflow import keras
import matplotlib.pyplot as plt
%matplotlib inline
(train_image,train_label),(test_image,test_label) = tf.keras.datasets.fashion_mnist.load_data() # 加载fashion_mnist数据
train_image = train_image/255 # 归一化
test_image = test_image/255
#设置输入
input = keras.Input(shape=(28*28))
#调用Flatten,将Flatten看成一个函数
x = keras.layers.Flatten()(input)
x = keras.layers.Dense(32,activation='relu')(x)
x = keras.layers.Dropout(0.5)(x)
x = keras.layers.Dense(64,activation='relu')(x)
output = keras.layers.Dense(10,activation='softmax')(x) # 输出层
model = keras.Model(inputs = input,outputs = output) # 依据指定的输入输出初始化模型
model.summary()
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
histroy = model.fit(train_image,
                   train_label,
                   epochs=30,
                   validation_data=(test_image,test_label))

猜你喜欢

转载自blog.csdn.net/qq_35134206/article/details/109130789