谈到深度学习,就不得不谈到tensorflow

在tensorflow之后出了2.0版本,相比之前有了很大的改变,趁着假期赶紧冲冲冲!

稍微学习了一些基础,做一个自我总结,作为一些基础的知识不再过多重复,有需要的自己上网查询。

写了一些代码,尽可能给出了必要的注释,具体的数学知识或者环境、运行问题欢迎留言讨论

使用语言为python 3.x

1.梯度下降

# 深度学习中不用担心局部极值点
# model.compile(optimizer='adam', loss='mse')中 optimizaer = 'adam'就是用了这样的优化方式

2.线性回归

import tensorflow as tf
import pandas as pd
import matplotlib.pyplot as plt data = pd.read_csv("education_income.csv")
print("****\n", data)
x = data.Education
y = data.Income
# 可视化数据
plt.title('la')
plt.xlabel("xxx")
plt.ylabel("yyy")
plt.plot(x, y, "ob")
plt.show()
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1, input_shape=(1,))) # dense里面(输出数据的维度,输入数据的形状,注意要有1,)
model.summary() #反应这个模型的基本情况,上面这个模型就是将(1,)的数据最后输出为一维数据,即y=ax+b
# 配置模型
model.compile(optimizer='adam', loss='mse') #优化方法,损失函数
# 编译模型
history = model.fit(x, y, epochs=5000)
# 使用模型预测现有的值
model.predict(x)
# 预测未知的值,输入series是所以里面写成这样
model.predict(pd.Series([20]))

3.多层感知器

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt data = pd.read_csv('xxxxxx.csv')
x = data.iloc[:, 1:-1] # 除去第一列和最后一列
y = data.iloc[:, -1] # 取到最后一列
# 建立模型
model = tf.keras.Sequential([tf.keras.layers.Dense(10, input_shape=(3,),activation='relu')], )
# dense就是隐含层,这里设置了10,inputshape是输入的数据的规格,activation是激活函数
# 配置模型
model.compile(optimizer='adam', loss='mse') #优化方法,损失函数
model.fit(x,y,epochs=100) # 编译模型 # 使用模型预测现有的值
model.predict(x)
# 预测未知的值,输入series是所以里面写成这样
model.predict(pd.Series([20])) test = data.iloc[:10,1:-1] #设置一个test,取他的前十个
model.predict(test) #这个是对应的预测值
test = data.iloc[:10, -1] #这个是实际的test值

4.逻辑回归

'''
平方差所惩罚的是与损失同一数量级的情形
二对于分类问题,最好使用交叉熵损失函数(输出更大)
tf.keras 中我们用到的是binary_crossentropy
''' import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt data = pd.read_csv('xxxx.csv') #一共16列前十五列是数据,这里的数据最后一列是1和-1的结果值
data.iloc[:,-1].value_counts() #查看最后一列的数据分布情况 x = data.iloc[:,:-1]
y = data.iloc[:,-1].replace(-1,0) # 把最后一列的数据中的-1替换成0 model = tf.keras.Sequential()# 顺序模型
model.add(tf.keras.layers.Dense(4,input_shape(15,),activation='relu'))
model.add(tf.keras.layers.Dense(4,activation='relu')) #再加上一层隐含层,不必再去输入shape的格式他会自己去推断
model.add(tf.keras.layers.Dense(1,activation='sigmoid')) #定义了输出层的结构,输出的维度为一 model.summary() # 编译模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics='acc')
# 这里每次进行云散时,损失函数是交叉熵,每一次计算的时候求acc(accurary准确率) #训练
history = model.fit(x,y,epochs=100) history.history.keys()# 现实的是记录的模型数据,这里是lss和acc的值
plt.plot(history.epoch, history.get('loss'))
plt.plot(history.epoch, history.get('acc'))

5.softmax分类

'''
平方差所惩罚的是与损失同一数量级的情形
二对于分类问题,最好使用交叉熵损失函数(输出更大)
tf.keras 中我们用到的是binary_crossentropy
''' import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt data = pd.read_csv('xxxx.csv') #一共16列前十五列是数据,这里的数据最后一列是1和-1的结果值
data.iloc[:,-1].value_counts() #查看最后一列的数据分布情况 x = data.iloc[:,:-1]
y = data.iloc[:,-1].replace(-1,0) # 把最后一列的数据中的-1替换成0 model = tf.keras.Sequential()# 顺序模型
model.add(tf.keras.layers.Dense(4,input_shape(15,),activation='relu'))
model.add(tf.keras.layers.Dense(4,activation='relu')) #再加上一层隐含层,不必再去输入shape的格式他会自己去推断
model.add(tf.keras.layers.Dense(1,activation='sigmoid')) #定义了输出层的结构,输出的维度为一 model.summary() # 编译模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics='acc')
# 这里每次进行云散时,损失函数是交叉熵,每一次计算的时候求acc(accurary准确率) #训练
history = model.fit(x,y,epochs=100) history.history.keys()# 现实的是记录的模型数据,这里是lss和acc的值
plt.plot(history.epoch, history.get('loss'))
plt.plot(history.epoch, history.get('acc'))

6.优化函数、学习速率、反向传播

'''
梯度下降输出响亮是损失函数增长最快的方向
梯度就是表明损失函数相对参数的变化率 对提督缩放的参数称为学习速率,超参数或者手工呢配置,太小会需要很多迭代,太大会跳过极值点(永远到不了)
调整学习速率,要足够小不超调,又要足够大尽快完成学习 多层时,反向传播返回
逐一计算隐含层的输出,计算导数,对已经完成计算的元素进行复用 optimizer ->传人model.compile中,也可以直接再后者中命令
常见的优化函数:
SGD:随即梯度下降优化器
RNSprop: 常用语 序列化的函数,序列预测,rnn lr学习速率rho提督平方的移动平均衰减率epsilon模糊因子decay参数跟新后学习速率衰减值
Adam :学习率建议0。001
''' model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate = 0.001))

7.网络优化和超参数选择

'''
增加神经元或者层数(徐年速度难度大,易过拟合) ''' history = model.fit(train_image,train_label_onehot,epochs=5,validation_data =(test_image,test_label_onehot)) #后面那个的作用就是再test中验证每一次循环中的准确率 '''
dropout避免过拟合
参数选择原则:先开发一个过拟合(添加跟多层,每一层跟大,训练更多轮次))
再抑制过拟合(dropout,正则化、图像增强),最好的办法还是增加训练样本
调节超惨数(学习速率、隐藏单元数、训练轮次) 传统机器学习有特征工程、增加训练数据、交叉验证等等 总的原则:1增大网络容量直到过拟合 2采取措施抑制过拟合 3重复第一个步骤
'''
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28))) # flatten的作用就是将而为的数据降到以为当中来
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(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')) # 也可以减少网络规模(单元层),128变成32隐藏单元数
model.add(tf.keras.layers.Dense(32,activation='relu'))

8.函数式API

import tensorflow as tf
import tensorflow as keras
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # fashion_mnist数据集可以直接用tensorflow加载,label用数字代表服装的类别
(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 # 函数层API 建模
#train_images.shape
input = keras.Input(shape=(28,28))
x = keras.layers.Flatten()(input)
x = keras.layers.Dense(32,activation = 'relu')(x) # 在x上面增加一层
x = keras.layers.Dropout(0.5)
x = keras.layers.Dense(64,activation = 'relu')(x)
output = keras.layers.Dense(10,activation = 'softmax')(x) model = keras.Model(input,outputs = output)
# model.summary # 可以进行多输入 input1 input2
input1 = keras.Input(shape=(28,28))
input2 = keras.Input(shape=(28,28))
x1 = keras.layers.Flatten()(input1)
x2 = keras.layers.Flatten()(input2)
x = keras.layers.concatenate([x1,x2])
x = keras.layers.Dense(32,activation = 'relu')(x) # 在x上面增加一层
x = keras.layers.Dropout(0.5)
x = keras.layers.Dense(64,activation = 'relu')(x)
output = keras.layers.Dense(10,activation = 'sigmold')(x) # 逻辑回归的问题用sigmold model = keras.Model([input1,input2],outputs = output)

看到这里,一般对于基本的tensorflow2的用法有了一定的基础,剩下的我也还在学习

这里给一些参考网址

https://tensorflow.google.cn/tutorials/structured_data/time_series

https://www.jianshu.com/p/599c79c3a537

假期续命充电——简单上手tesorflow2 框架的更多相关文章

  1. Tinker 热修复框架 简单上手教程

    当你们看到Tinker的时候是不是有点愣逼这个是什么东西? 简单来说就是不需要重新下载app和重新安装app 来进行更新app的技术框架. 看看这个吧,我也是才学习 ,先做个学习记录 参考:Tinke ...

  2. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  3. PHP之简单实现MVC框架

    PHP之简单实现MVC框架   1.概述 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种 ...

  4. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  5. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  6. AsMVC:一个简单的MVC框架的Java实现

    当初看了<从零开始写一个Java Web框架>,也跟着写了一遍,但当时学艺不精,真正进脑子里的并不是很多,作者将依赖注入框架和MVC框架写在一起也给我造成了不小的困扰.最近刚好看了一遍sp ...

  7. 一个简单的web框架实现

    一个简单的web框架实现 #!/usr/bin/env python # -- coding: utf-8 -- __author__ = 'EchoRep' from wsgiref.simple_ ...

  8. 最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

  9. [angularjs] MVC + Web API + AngularJs 搭建简单的 CURD 框架

    MVC + Web API + AngularJs 搭建简单的 CURD 框架 GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage ...

随机推荐

  1. P1086 最大素数积

    题目描述 我们称一个整数 \(x\) 是"素数积"当且仅当 \(x = a \times b\) 并且 \(a\) 和 \(b\) 都是素数. 现在告诉你一个数 \(N(1 \le ...

  2. 一图理解vue生命周期

    博客园上传图不太清晰,可以查看我的CSDN https://blog.csdn.net/jiaoshuaiai/article/details/90046736 感谢: https://segment ...

  3. vue-learning:19 - js - filters

    filters 基本使用 仅限在插值{{}}和v-bind指令中使用 管道符|分隔 链式调用 传入参数 全局注册和局部注册 纯函数性质(不能使用this) 基本使用 我们看下之前用计算属性实现的例子, ...

  4. vue面试的一些总结

    vue中组件的data为什么是一个函数? 组件是可复用的vue实例,一个组件被创建好之后,就可能被用在各个地方,而组件不管被复用了多少次,组件中的data数据都应该是相互隔离,互不影响的,基于这一理念 ...

  5. CodeForces - 617E XOR and Favorite Number (莫队+前缀和)

    Bob has a favorite number k and ai of length n. Now he asks you to answer m queries. Each query is g ...

  6. Visual Studio插件【一】:前端

    JQuery Code Snippets https://github.com/kspearrin/Visual-Studio-jQuery-Code-Snippets 简单用法 jq   +tab ...

  7. Xcode崩溃日志分析工具symbolicatecrash用法

    1.什么是symbolicatecrash? symbolicatecrash是Xcode自带的一个分析工具,可以通过机器上的崩溃日志和应用的.dSYM文件定位发生崩溃的位置,把crash日志中的一堆 ...

  8. JavaScript中浅拷贝和深拷贝的区别

    JavaScript数据类型 基础数据类型:保存在栈内存中的简单数据段 ,有undefined,boolean,number,string,null 引用数据类型:Array,object,Funct ...

  9. 洛谷$P$2286 宠物收养场 $[HNOI2004]$ $splay$

    正解:$splay$ 解题报告: 传送门! $splay$板子,,,? 先考虑这题要实现些什么东西嘛$QwQ$ 其实只要实现一个东西?就查询数列中与给定数字相差最小的数,显然用$splay$查询前驱后 ...

  10. $HDU1846\ Brave\ Game$ 博弈论

    正解:博弈论 解题报告: 传送门! 巴什博奕板子题鸭$QwQ$ 就有个结论,是说当$(m+1)\mid n$时先手必败,否则必胜 这个瞎证明一下就能出来 就考虑当$(m+1)\mid 1$时,若先手取 ...