df1.index与df.类别

df1.index与df.类别,第1张

1、查看数据类型:type(a)

2、查看已安装的包:

在dos命令行界面:如果你使用的是pip来作为你的python包管理器的话,可以在命令行下直接运行$ pip freeze或者$ pip list来查看安装包的信息,当然其它的包管理器也有类似的功能,同时,你也可以在python交互式解释器中导入pip模块来查看包信息。

在python提示符下,用help(‘modules’),可以显示所有包名称,用import sys as s >>s.modules.keys() ,可以显示系统模块;

3、在LINUX环境下安装anaconda:https://blog.csdn.net/wyf2017/article/details/118676765?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2.pc_relevant_default&utm_relevant_index=5

1)先找需要安装版本的官网地址链接,如https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh;

2)在linux控制台输入:wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh

3)先赋权在安装程序:chmod +x Anaconda3-5.3.0-Linux-x86_64.sh

./Anaconda3-5.3.0-Linux-x86_64.sh

4)一直按ENTER,直到出现选择yes or no,输入yes;

5)继续按ENTER,直到出现选择yes,输入yes,添加环境变量;

6)若上面这一步没选择yes,会默认选择no,则需要自己到安装anaconda的路径下,设置环境变量:

export PATH=/home/anaconda3/bin:KaTeX parse error: Expected 'EOF', got '#' at position 36: …一句话注释掉: #̲ export PATH=/u…PATH

export PATH=/root/anaconda3/bin:$PATH

8)然后,保存更改:source ~/.bashrc

9)检测是否安装成功:

进入自己的文件夹目录下输入:anaconda -V conda -V

4、在linux环境下下载并安装mysql:https://blog.csdn.net/darendu/article/details/89874564?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164517585116780265466903%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164517585116780265466903&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogbaidu_landing_v2~default-3-89874564.nonecase&utm_term=linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E5%AE%89%E8%A3%85mysql&spm=1018.2226.3001.4450

1)先找安装包网址链接:从官网或者网盘下载

2)用linux命令将安装包下载到指定文件夹下:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

3)再安装到指定目录下:

cd 路径

解压:tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

修改文件夹名称:mv mysql-5.7.25-linux-glibc2.12-x86_64 /mysql

2)新建data目录

命令:mkdir /mysql/data

3)新建mysql用户组及mysql用户

命令:groupadd mysql //新建用户组

命令:useradd mysql -g mysql //新建用户

4)将/usr/local/mysql的所有者及所属组改为mysql

chown -R mysql.mysql /usr/local/mysql

5)配置

命令:/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data

6)配置/etc/my.cnf

vim /etc/my.cnf

7)开启服务

命令:cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql //将mysql加入服务

命令:chkconfig mysql on //开机自动启动

命令:service mysql start //开启mysql服务

开启mysql服务报错, 在这里插入图片描述

8)设置密码

命令:/usr/local/mysql/bin/mysql -u root -p //在my.cnf中配置了取消密码验证,此处密码任意输入

命令:use mysql// *** 作mysql数据库

命令:update user set authentication_string=password(‘你的密码’) where user=‘root’//修改密码

命令:flush privileges

命令:exit//退出

9)将/etc/my.cnf中的skip-grant-tables删除

10)如果是本机安装则到此步骤已经安装配置完成,如果是在虚拟机或者远程服务器上安装,则需要以下步骤

允许远程连接

命令:/usr/local/mysql/bin/mysql -u root -p //登录

命令:use mysql

命令:update user set host=’%’ where user = ‘root’

命令:flush privileges

命令:exit

Pandas

dataframe:

1、dataframe,如何查看一个DataFrame对象的所有索引,列名,以及DataFrame中具体的值?

有一个dataframe对象df1,查看索引使用使用df1.index,查看列名使用df1.columns,查看所有的值为df1.values。

2、创建dataframe:

df1=pd.DataFrame(np.arange(16).reshape(4,4),

index = pd.date_range(‘20200101’, periods = 4),

columns=list(‘ABCD’))

3、使用df1.index返回的是一个索引,如果获取具体的值的话,需要使用df1.index.values转化为列表。

4、根据列名取dataframe的数据

基本格式:dataframe[列名]

1)取多列

列名要用中括号括起来,所以下述命令

dataframe[[‘P4_profit_rate’,‘P3PS’,‘P3NS’]] 没问题,返回pandas.core.frame.DataFrame类型的值

dataframe[‘P4_profit_rate’,‘P3PS’,‘P3NS’]出错

2)取一列

列名可以不用中括号括起来,

dataframe[‘P4_profit_rate’] 没问题,返回pandas.core.series.Series类型的值

列名也可以用中括号括起来,

dataframe[[‘P4_profit_rate’]] 也能正常运行,但返回pandas.core.frame.DataFrame类型的值

1. 常用基本方法及属性

df.info() 输出总行数、各列的行数、类型、索引、占用内存等信息;

df.index 输出索引,为 pandas.core.indexes.range.RangeIndex 类型;

df.columns 输出列名,为pandas.core.indexes.base.Index 类型,可使用df.columns.str ;

df.dtypes 各列的类型,输出一个series,值是object类型;

df.values 值,输出一个 array ;

df.describe() 输出各数值列的统计值,如非空个数、均值、std、极值、分位数。

2. 索引

df.set_index() 设置索引,括号内可以填入DataFrame中某列的列名,就能使用此列作为索引;

df.loc[ ] 以label索引,可实现花哨的混合索引,如:df.loc[ df.density>100, [‘pop’, ‘density’] ] ;

df.iloc[ ] 以绝对位置索引,即数字;

掩码 *** 作,如 df[ df [‘density’] >100 ] 。

3. 计算:

df.cov() 协方差,df.corr() 相关系数,df.mean(axis = 1),df.median(),df.max();

df[ ‘Age’ ].value_counts(ascending = True, bins = 5) 非nan计数(升序排列,分箱);

pd.cut()也能实现连续值离散化,pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)。

4. 增删改查、合并、排序

使用df.copy()防止误修改df;

df.rename(index = {‘a’ : ‘A’}, inplace = True) 重命名索引,注意需要inplace为True才能真正修改;

df.append(df2) 增加;

df.drop([‘a’, ‘b’], inplace = True) 删除;

data.drop_duplicates()去重,subset参数可以选择具体的列;

df3 = pd.concat([df1,df2], axis = 0) 实现两个DataFrame的简易合并;

pd.merge(on, left_on, right_on, left_index, right_index, how, suffixes) 数据表连接 *** 作,on可以指定多个列作为键

多列排序 data.sort_values(by=[‘group’,‘data’],ascending = [False,True],inplace=True),即在by、ascending处传入list,会先按’group’列再按’data’列排序。

5. groupby聚合 和数据透视表pivot_table(相当于多维的groupby *** 作)

df.pivot_table(index = ‘Sex’, columns=‘Pclass’, values=‘Fare’,aggfunc = ‘sum’) ,aggfunc默认是mean;

6. 时间序列

Pandas所有关于日期与时间的处理方法全部是通过Timestamp对象实现的;

pd.to_datetime(‘2017-11-24’) 把str转化为Timestamp对象(pd.Timestamp也可以);

ts + pd.Timedelta(‘5 days’) 用Timedelta加上时间间隔;

pd.read_csv()方法中参数parse_dates = True,可以直接将数据中的时间作为索引;

将时间戳作为索引值取出对应时间段内的数据:data[pd.Timestamp(‘2012-01-01 09:00’):pd.Timestamp(‘2012-01-01 19:00’)] ,

同时也可以使用 data[‘2013’],data[‘2012-01’:‘2012-03’] 等简便方式;

仅取1月份的数据 data[data.index.month == 1] ;

时间重采样,将原始数据转化为均匀间隔的数据,

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention=‘start’,kind

=None, loffset=None, limit=None, base=0),如df.resample(‘3D’)方法,对3天的数据进行重采样。

7. apply自定义函数 DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), kwds),说明:

允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple,

关键字参数允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

8.缺失值:DataFrame.isnull().any(),.fillna() 等。

9.字符串Series.str.lower(),str是Series的一个属性,s.str.upper(),s.str.len(),index.str.strip(),df.columns.str.replace(’ ‘,’‘),s.str.split(’‘),s.str.contains(‘Ag’),s.str.get_dummies(sep = ‘|’) 。

10、notebook显示设置:

pd.set_option(),pd.get_option()用于使用Notebook做展示;

pd.set_option(‘display.max_columns’,30),pd.set_option(‘display.max_colwidth’,100),

pd.set_option(‘display.max_colwidth’,100)。

11、重复记录处理

1)生成重复记录

#生成重复数据

df=pd.DataFrame(np.ones([5,2]),columns=[‘col1’,‘col2’])

df[‘col3’]=[‘a’,‘b’,‘a’,‘c’,‘d’]

df[‘col4’]=[3,2,3,2,2]

df=df.reindex(columns=[‘col3’,‘col4’,‘col1’,‘col2’]) #将新增的一列排在第一列

2)判断重复记录

isDplicated=df.duplicated() #判断重复数据记录

3)删除重复值

new_df1=df.drop_duplicates() #删除数据记录中所有列值相同的记录

new_df2=df.drop_duplicates([‘col3’]) #删除数据记录中col3列值相同的记录

new_df3=df.drop_duplicates([‘col4’]) #删除数据记录中col4列值相同的记录

new_df4=df.drop_duplicates([‘col3’,‘col4’]) #删除数据记录中(col3和col4)列值相同的记录

4)python去重drop_duplicates后一定要reset_index()。

pandas.DataFrame.reset_index

函数作用:重置索引或其level。

重置数据帧的索引,并使用默认索引。如果数据帧具有多重索引,则此方法可以删除一个或多个level。

函数主要有以下几个参数:reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=’')

各个参数介绍:

level:可以是int, str, tuple, or list, default None等类型。作用是只从索引中删除给定级别。默认情况下删除所有级别。

drop:bool, default False。不要尝试在数据帧列中插入索引。这会将索引重置为默认的整数索引。

inplace:bool, default False。修改数据帧(不要创建新对象)。

col_level:int or str, default=0。如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一层。

col_fill:object, default。如果列有多个级别,则确定其他级别的命名方式。如果没有,则复制索引名称。

返回:

DataFrame or None。具有新索引的数据帧,如果inplace=True,则无索引。

python使用问题集锦

1、报错:NameError: name ‘scipy’ is not defined

使用!pip install packages scipy,重新安装成功后,还报错;在运行前先from scipy import optimize,再运行也报错;

还有说是注释或者换行等问题导致的,都无法解决,最后一个可能再试试:在安装scipy前要先安装numpy+mkl(非numpy)。

在如下地址下载安装numpy: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

Numpy+MKL is linked to the Intel® Math Kernel Library and includes required DLLs in the numpy.DLLs directory.

下载完成后,在cmd命令行中用pip install numpy-1.22.2+mkl-pp38-pypy38_pp73-win_amd64.whl进行安装,报错如下:

ERROR: numpy-1.22.2+mkl-pp38-pypy38_pp73-win_amd64.whl is not a supported wheel on this platform.

错误原因:安装的不是对应python版本的库,下载的库名中cp27代表python2.7,其它同理。我的python是3.8版本,重新下载后,再安装,进入正常流程中。但是又报如下错误: 在这里插入图片描述

文章知识点与官方知识档案匹配

Python入门技能树首页概览

208764 人正在系统学习中

点击阅读全文

打开CSDN APP,看更多技术内容

Pandas的基本功能_笑 瘾的博客_pandas作用

一、Pandas的常用32个方法和功能 DataFrame() 创建一个DataFrame对象 df.values 返回ndarray类型的对象 df.shape 返回行列数 df.index 获取行索引 df.set_index 设置索引 df.reset_index 重制索引 df.columns 获取列索引 df.rename 重...

继续访问

pandas教程:pandas主要功能详解_hello-java-maker的博客_pand...

df =pd.read_csv("Counts.csv", header=0) df.head() 1 2 选择/切片 df[‘column_name’] ,df[row_start_index, row_end_index] 选取指定整列数据 df['name'] # 选取一列,成一个series df[['name']] # 选取一列...

继续访问

numpy‑1.21.4+mkl‑pp38‑pypy38_pp73‑win_amd64.whl

numpy‑1.21.4+mkl‑pp38‑pypy38_pp73‑win_amd64.whl

Python数据分析 | (17) pandas的基本功能

本篇博客中,我将介绍 *** 作Series和DataFrame中的数据的基本手段。后续将更加深入地挖掘pandas在数据分析和处理方面的功能。这不是pandas库 的详尽文档,主要关注的是最重要的功能,那些不大常用的内容(也就是那 些更深奥的内容)就交给你自己去摸索吧。 目录 1. 重新索引 2. 丢弃指定轴上的项 3. 索引、选取和过滤 4. 整数索引 5. 算术运算和数据对齐 6. ...

继续访问

最新发布 python安装ERROR: matplotlib-3.6.2-pp38-pypy38_pp73-win_amd64.whl is not a supported wheel on this plat

我把文件名称改为matplotlib-3.6.2-py39-none-any.whl。2、看到支持的文件的名称是py30-none-any。

继续访问

热门推荐 使用python经常出现NameError: name 'xxx' is not defined

使用python经常出现NameError: name ‘xxx’ is not defined感觉神之存在的Bug 用注释居然解决了 之前k_means一直是没定义后来加了注释#abc就解决了from sklearn.cluster import k_means# abc如下图所示:解决后感觉太特么奇妙了

继续访问

pandas中index索引功能是什么

pandas的索引对象可以用来保存坐标轴标签和其它元数据,是使用过程中必要的参与对象,那pandas中index索引功能是什么呢?pandas中index索引可以轻松的读取数据,更方便的数据查询,使用index查询的时候可以获得性能提升。 一、index索引特点 更方便的数据查询,使用index查询的时候可以获得性能提升; 自动的数据对齐功能; 更多更强大的数据结构支持。 二、index索引用途 1、使用index读取数据 import pandas as pd df = pd.read_csv("./.

继续访问

pandas 基础功能(二)

pandas 基础功能(二) 1.新增 2.删除 3.修改数据 1.新增 1)在最后新增一列(列S): df["列S]=list ## 增加列的元素个数要跟原数据列的个数一样 2)在指定位置新增一列(列Q): # 语法格式:列表.insert(index, obj) # index --->对象 obj 需要插入的索引位置。 # obj --->要插入列表中的对象(列名) col_name=df1.columns.tolist() # 将数据框的列...

继续访问

【报错解决】复现Deep Supervised Cross-Modal Retrieval报错module scipy has no attribute spatial的解决

module scipy has no attribute spatial报错的解决。

继续访问

Python函数调用出现NameError: name ‘xxx‘ is not defined的解决办法

原因: 函数里用的是局部变量,从而函数调用结束后会被销毁。如果不声明是全局变量,那么就会报错:(注意灰色字体注释的地方) def load_data(): from keras.datasets import mnist # global train_image, train_lable , test_image, test_lable (train_image, train_lable), (test_image, test_lable) = mnist.load_data.

继续访问

Python使用pip安装报错:is not a supported wheel on this platform的解决方法

我的python是3.8 win64位 安装cryptography报错is not a supported wheel on this platform 首先我是在官网cryptography · PyPI下载的cryptography-37.0.2-pp38-pypy38_pp73-win_amd64.whl 官网如下,安装的时候报错cryptography · PyPI 解决版本:改安装报的名字 步骤一,cmd里面输入pip debug --verbose,会列出支持包的名字,我把包的名字改

继续访问

Python-Pandas{数据结构与基本功能}

PandsSeries手动构建SeriesSeries的索引和切片按照字典的方式进行索引和切片   Pandas通常是用于数据分析过程中, 数据的清洗, 数据预处理, 数据的描述性分析等过程中。在整个Python数据分析的生态环境中, Pandas的地位非常重要, 利用Pandas可以快速便捷的对数据进行各种各样的处理与 *** 作.   在Pandas中, 最重要的两种数据结构是1维的Series和2维的DataFrame. Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数

继续访问

Pandas 10. 索引index的用途

更方便的数据查询:df.loc[index, :]使用index会提升查询性能自动的数据对齐功能使用index.更多更强大的数据结构支持 很多强大的索引数据结构Categoricallndex,基于分类数据的Index,提升性能Multilndex,多维索引,用于groupby多维聚合后结果等;Datetimelndex,时间类型索引,强大的日期和时间的方法支持:

继续访问

Pandas的索引index的用途(十一)

1、Pandas的索引index的用途 把数据存储于普通的column列也能用于数据查询,那使用index有什么好处? index的用途总结: 1、更方便的数据查询; 2、使用index可以获得性能提升; 3、自动的数据对齐功能; 4、更多更强大的数据结构支持; 2、实例用途 (1)读取数据 import pandas as pd df = pd.read_csv...

继续访问

python语法基础

1.import 和 from … import 模块的变量、方法引用差异 from pandas import DataFrame from…import // 直接使用函数名使用就可以了 import pandas as pd import //模块.函数 a.import…as import:导入一个模块;注:相当于导入的是一个文件夹,是个相对路径 import A as B:给予工具库 A 一个简单的别称 B ,可以帮助记忆。例:import torc...

继续访问

python数据分析学习(3)

python数据分析·numpy的一些函数

继续访问

Pandas详解三之Index对象

约定 import pandas as pd from pandas import DataFrame import numpy as np Index Index对象保存着索引标签数据,它可以快速找到标签对应的整数下标,其功能与Python的字典类似。 dict1={"Province":["Guangdong","Beijing","Qinghai","Fu...

继续访问

Pandas的索引index的用途

##Pandas的索引index的用途 '''把数据存储于普通的column列也能用于数据查询,那使用index有什么好处?index的用途总结: 1.更方便的数据查询2.使用index可以获得性能提升3.自动的数据对齐功能4.更多更强大的数据结构支持''' import pandas as pd df =pd.read_csv('F:\\python387\\pandas\\antlearnpandasmaster\\datas\\ml_latest_small\\ratings.csv'.

继续访问

python创建python.py时遇到的问题 name is not defined

创建py文件之后,运行文件时报错: 是一个nameerror,说var为定义,所以执行不成功。这是因为将var定义在了函数里面,即return后一行的代码缩进了,导致var没有定义成功,只需要去除缩进就可以了。 更改如下: ...

继续访问

pandas的Index对象

Index对象保存着索引标签数据,它可以快速找到标签对应的整数下标,其功能与Python的字典类似。 dict1={"Province":["Guangdong","Beijing","Qinghai","Fujiang"], "year":[2018]*4, "pop":[1.3,2.5,1.1,0.7]} df1=DataFrame(dict1) df1 1 2 3 4 5 代码结果 Province pop year 0 Guangdong 1.3...

继续访问。

在Keras中设定了两类深度学习模型: 一类是序列模型(Sequential类) ; 一类是通用模型(Model类) 。 其差异在于不同的拓扑结构。

序列模型属于通用模型的一个子类, 因为很常见, 所以这里单独列出来进行介绍。 这种模型

各层之间是依次顺序的线性关系, 在第k层和第k+1层之间可以加上各种元素来构造神经网络。

通用模型可以用来设计非常复杂、 任意拓扑结构的神经网络, 例如有向无环网络、 共享层网络等。

Keras中的重要对象

常用的激活函数、 参数初始化方法、 正则化方法等。

在Keras中使用激活对象有两种方法: 一是单独定义一个激活层; 二是在前置层里面通过激活选项来定义所需的激活函数。

1、model.add(Dense(64,input)_shape=(784,))

model.add(Activation('tanh'))

2、model.add(Dense(64,input_shape=(784,),activation='tanh'))

初始化对象

初始化对象(Initializer) 用于随机设定网络层激活函数中的权重值或者偏置项的初始值, 包括kernel_initializer和bias_initializer。

正则化对象

在神经网络中也提供了正则化的手段, 分别应用于权重参数、 偏置项以及激活函数, 对应的选项分别是kernel_regularizer、bias_reuglarizier和activity_regularizer。

Keras中的网络层构造

核心层(Core Layer) 是构成神经网络最常用的网络层的集合, 包括: 全连接层、 激活层、放弃层、 扁平化层、 重构层、 排列层、 向量反复层、 Lambda层、 激活值正则化层、 掩盖层。 所有的层都包含一个输入端和一个输出端, 中间包含激活函数以及其他相关参数等.

全连接层。 在神经网络中最常见的网络层就是全连接层, 在这个层中实现对神经网络里面的神经元的激活

激活层。 激活层是对上一层的输出应用激活函数的网络层, 这是除应用activation选项之外, 另一种指定激活函数的方式。 其用法很简单, 只要在参数中指明所需的激活函数即可.

放弃层。 放弃层(Dropout) 是对该层的输入向量应用放弃策略。 在模型训练更新参数的步骤中, 网络的某些隐含层节点按照一定比例随机设置为不更新状态, 但是权重仍然保留, 从而防止过度拟合。

扁平化层。 扁化层(Flatten) 是将一个维度大于或等于3的高维矩阵按照设定“压扁”为一个二维的低维矩阵。其压缩方法是保留第一个维度的大小, 然后将所有剩下的数据压缩到第二个维度中, 因此第二个维度的大小是原矩阵第二个维度之后所有维度大小的乘积。 这里第一个维度通常是每次迭代所需的小批量样本数量, 而压缩后的第二个维度就是表达原图像所需的向量长度。

重构层。 重构层(Reshape) 的功能和Numpy的Reshape方法一样, 将一定维度的多维矩阵重新排列构造为一个新的保持同样元素数量但是不同维度尺寸的矩阵。 其参数为一个元组(tuple) , 指定输出向量的维度尺寸, 最终的向量输出维度的第一个维度的尺寸是数据批量的大小, 从第二个维度开始指定输出向量的维度大小。

排列层。 排列层(Permute) 按照给定的模式来排列输入向量的维度。 这个方法在连接卷积网络和时间递归网络的时候非常有用。 其参数是输入矩阵的维度编号在输出矩阵中的位置。

向量反复层。 顾名思义, 向量反复层就是将输入矩阵重复多次。

model.add(Dense(64,input_dim=(784,)))

model.add(RepeatVector(3))

在第一句中, 全连接层的输入矩阵是一个有784个元素的向量, 输出向量是一个维度为(one, 64) 的矩阵; 而第二句将该矩阵反复3次, 从而变成维度为(None, 3, 64) 的多维矩阵, 反复的次数构成第二个维度, 第一个维度永远是数据批量的大小。

Lambda层。 Lambda层可以将任意表达式包装成一个网络层对象。 参数就是表达式, 一般是一个函数, 可以是一个自定义函数, 也可以是任意已有的函数。

激活值正则化层。 这个网络层的作用是对输入的损失函数更新正则化。

掩盖层。 该网络层主要使用在跟时间有关的模型中, 比如LSTM。 其作用是输入张量的时间步, 在给定位置使用指定的数值进行“屏蔽”, 用以定位需要跳过的时间步。

卷积层

卷积 *** 作分为一维、 二维和三维, 对应的方法分别是Conv1D、 Conv2D和Conv3D。

Conv1D、 Conv2D和Conv3D的选项几乎相同。

filters: 卷积滤子输出的维度, 要求整数。

kernel_size: 卷积核的空域或时域窗长度。要求是整数或整数的列表, 或者是元组。 如果是单一整数, 则应用于所有适用的维度。

strides: 卷积在宽或者高维度的步长。 要求是整数或整数的列表, 或者是元组。 如果是单一整数, 则应用于所有适用的维度。 如果设定步长不为1, 则dilation_rate选项的取值必须为1。

padding: 补齐策略, 取值为valid、 same或causal。 causal将产生因果(膨胀的) 卷积,即output[t]不依赖于input[t+1: ], 在不能违反时间顺序的时序信号建模时有用。 valid代表只进行有效的卷积, 即对边界数据不处理。 same代表保留边界处的卷积结果, 通常会导致输出shape与输入shape相同。

data_format: 数据格式, 取值为channels_last或者channels_first。 这个选项决定了数据维

度次序, 其中channels_last对应的数据维度次序是(批量数, 高, 宽, 频道数) , 而channels_first对应的数据维度次序为(批量数, 频道数, 高, 宽) 。

activation: 激活函数, 为预定义或者自定义的激活函数名

dilation_rate: 该选项指定扩张卷积(DilatedConvolution) 中的扩张比例。 要求为整数或由单个整数构成的列表/元组, 如果dilation_rate不为1, 则步长一项必须设为1。

use_bias: 指定是否使用偏置项, 取值为True或者False。

kernel_initializer: 权重初始化方法, 为预定义初始化方法名的字符串, 或用于初始化权重的函数.

bias_initializer: 偏置初始化方法, 为预定义初始化方法名的字符串, 或用于初始化偏置的函数。

kernel_regularizer: 施加在权重上的正则项.

bias_regularizer: 施加在偏置项上的正则项.

activity_regularizer: 施加在输出上的正则项.

kernel_constraints: 施加在权重上的约束项

bias_constraints: 施加在偏置项上的约束项

池化层

池化(Pooling) 是在卷积神经网络中对图像特征的一种处理, 通常在卷积 *** 作之后进行。 池

化的目的是为了计算特征在局部的充分统计量,从而降低总体的特征数量, 防止过度拟合和减少

计算量。 举例说明: 假设有一个128×128的图像, 以8×8的网格做卷积, 那么一个卷积 *** 作一

共可以得到(128-8+1) 2个维度的输出向量, 如果有70个不同的特征进行卷积 *** 作, 那么总体的

特征数量可以达到70×(128-8+1) 2=1024870个。用100万个特征做机器学习, 除非数据量极大,否则很容易发生过度拟合。

循环层

循环层(Recurrent Layer) 用来构造跟序列有关的神经网络。 但是其本身是一个抽象类, 无法

实例化对象, 在使用时应该使用LSTM, GRU和SimpleRNN三个子类来构造网络层。

嵌入层

嵌入层(Embedding Layer) 是使用在模型第一层的一个网络层, 其目的是将所有索引标号映射到致密的低维向量中.通常用在对文本数据进行建模的时候。

合并层

合并层是指将多个网络产生的张量通过一定方法合并在一起, 合并层支持不同的合并方法, 包括:

元素相加(merge.Add) 、 元素相乘

(merge.Multiply) 、 元素取平均

(merge.Average) 、 元素取最大

(merge.Maximum) 、 叠加

(merge.Concatenate) 、 矩阵相乘

(merge.Dot) 。

作者 | 杨照璐(微信号lwyzl0821)

编辑 | 言有三

这一次我们讲讲keras这个简单、流行的深度学习框架,一个图像分类任务从训练到测试出结果的全流程。

相关的代码、数据都在我们 Git 上,希望大家 Follow 一下这个 Git 项目,后面会持续更新不同框架下的任务。

Keras是一个非常流行、简单的深度学习框架,它的设计参考了torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU。能够在TensorFlow,CNTK或Theano之上运行。 Keras的特点是能够快速实现模型的搭建, 简单方便地让你实现从想法到实验验证的转化,这都是高效地进行科学研究的关键。

Keras的安装非常简单,但是需要先安装一个后端框架作为支撑,TensorFlow, CNTK,Theano都可以,但是官网上强烈建议使用TensorFlow作为Keras的后端进行使用。本例以TensorFlow 1.4.0 版本作为Keras的后端进行测试。

通过上面两条命令就可以完成TensorFlow和Keras的安装,此处需要注意的一点是Keras的版本和TensorFlow的版本要对应,否则会出现意外的错误。具体版本对应关系可在网上进行查询。

3.1 MNIST实例

MNIST手写字符分类被认为是深度学习框架里的“Hello Word!”,下面简单介绍一下MNIST数据集案例的测试。Keras的官方github的example目录下提供了几个MNIST案例的代码,下载mnist_mlp.py,mnist_cnn.py文件,本地运行即可,其他文件读者也可以自行测试。

3.2 数据定义

前面我们介绍了MNIST数据集实例,很多读者在学习深度学习框架的时候都卡在了这一步,运行完MNIST实例之后无从下手,很大原因可能是因为不知道怎么处理自己的数据集,这一节我们通过一个简单的图像二分类案例,介绍如何实现一个自定义的数据集。

数据处理有几种方式,一种是像MNIST、CIFAR数据集,这些数据集的特点是已经为用户打包封装好了数据。用户只要load_data即可实现数据导入。其实就是事先把数据进行解析,然后保存到.pkl 或者.h5等文件中,然后在训练模型的时候直接导入,输入到网络中;另一种是直接从本地读取文件,解析成网络需要的格式,输入网络进行训练。但是实际情况是,为了某一个项目我们不可能总是找到相应的打包好的数据集供使用,这时候自己建立一个dataset就十分重要。

Keras提供了一个图像数据的数据增强文件,调用这个文件我们可以实现网络数据加载的功能。

此处采用keras的processing模块里的ImageDataGenerator类定义一个图像分类任务的dataset生成器:

下面简单地介绍一下上面的代码,完整代码请移步Git工程。

Keras的processing模块中提供了一个能够实时进行数据增强的图像生成类ImagGenerator,该类下面有一个函数flow_from_directory,顾名思义该函数就是从文件夹中获取图像数据。关于ImageGenerator更多的使用可以参考官方源码。数据集结构组织如下:

此处还需要注意的一点是,我们现在进行的是简单的图像分类任务训练,假如要完成语义分割,目标检测等任务,则需要自定义一个类(继承ImageDataGenerator),具体实现可以查询相关代码进行参考。

Keras网络模型搭建有两种形式,Sequential 顺序模型和使用函数式API的 Model 类模型。本教程的例子采用一个简单的三层卷积,以及两层全连接和一个分类层组成的网络模型。由于函数式API更灵活方便,因此下面采用函数式方法搭建模型,模型定义如下:

4.1 函数式API

即输出是12通道,卷积核大小3*3,步长为2,padding='same'表示边缘补零

axis表示需要归一化的坐标轴,bn_axis=3,由于采用TensorFlow作为后端,因此这句代码表示在通道数坐标轴进行归一化。

x = Flatten()(x) 表示将卷积特征图进行拉伸,以便和全连接层Dense()进行连接。

Dense()实现全连接层的功能,1200是输出维度,‘relu'表示激活函数,使用其他函数可以自行修改。

最后一层采用‘softmax’激活函数实现分类功能。

最终返回Model,包含网络的输入和输出。

4.2 模型编译

网络搭建完成,在网络训练前需要进行编译,包括学习方法、损失函数、评估标准等,这些参数分别可以从optimizer、loss、metric模块中导入。具体代码如下:

其中callbacks模块包含了TensorBoard, ModelCheckpoint,LearningRateScheduler等功能,分别可以用来可视化模型,设置模型检查点,以及设置学习率策略。

5.1 模型训练

Keras模型训练过程非常简单,只需一行代码,设置几个参数即可,具体代码如下:

首先指定数据生成器,train_generator, 前面介绍过;steps_per_epoch是每次epoch循环的次数,通过训练样本数除以batch_size得到;epochs是整个数据集重复多少次训练。

Keras是高度封装的,在模型训练过程中,看不到网络的预测结果和网络的反向传播过程,只需定义好损失函数,事实上,网络定义中的模型输出会包含网络的输入和输出。

5.2 训练过程可视化

keras可以采用tensorboard实现训练过程的可视化。执行完下面的命令就可以在浏览器访问http://127.0.0.1:6006查看效果。

tensorboard --logdir 日志文件路径(默认路径=‘./logs’’)

上面是分别是训练和测试过程的loss和accuracy。

5.3 模型测试

model = simpleconv3()

model.load_weights(model_path, by_name=True)

image_path = '../../../../datas/head/train/0/1left.jpg'

img = Image.open(image_path)

img = img_to_array(img)

img = cv2.resize(img, image_size)

img = np.expand_dims(img, axis=0)

img = preprocess_input(img)

result = model.predict(img, batch_size=1)

print(result)

以上代码简单介绍一下:模型测试流程非常清晰,首先加载模型,加载参数>>将数据输入网络>>模型预测。

模型训练完成后,仅需用model.save_weights('models/model.h5')一句代码就可以完成模型的保存。同样,模型的导入采用model.load_weights(model_path, by_name=True),需要注意的是要设置by_name=True,这样就能保证和模型名称一样的参数都能加载到模型,当然模型定义要和参数是匹配的,假如要进行fine-tune我们只需保证需要重新训练或者新加的网络层的名称和预加载模型参数名称不一样就可以。

以上内容涵盖了采用keras进行分类任务的全部流程,从数据导入、模型搭建、模型训练、测试,模型保存和导入几个方面分别进行了介绍。当然这只是一些基本的应用,还有一些高级、个性化功能需要我们进一步学习,有机会,下一次介绍一下自定义网络层、设置check_point、特征可视化等特性。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8430576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存