round(number,digits)
返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果
例如:round(0.456,2)=0.46
math.floor(number)
返回Number的整数部分
查找功能:string.find() 与 string.index()
列表没有find()功能,只有index()功能
find()找不到返回-1,index()找不到会报错
字符串函数
string.startwith(str) 以str开始
string.endwith(str) 以str结尾
字符串标准化str.strip()
默认去除两边的空格、换行符之类的,去除内容可以指定
字母大小写
str.upper():全部大写
str.lower():全部小写
str.capitalize():字符串的首字母大写
列表添加元素
1、append()
在末尾添加元素
2、insert()
list.insert(index, value)在指定索引位置插入值value,若索引不存在,则在末尾插入
3、extend()
合并两个列表extend(list1, list2)
集合添加、删除元素
set.add(value)
set.remove(value)
字符串的格式化输出
%
string.format()
f.string
生成器
1、列表生成式
a = (x for x in range(10))
# 访问元素
next(a)
#访问元素
for x in a:
print(x)
2、构造函数
yield 关键字
函数
# 五种参数
# 顺序必须是 必选参数---> 默认参数---> 可变参数---> 命名关键字参数--->关键字参数
必选参数、默认参数、可变参数、关键字参数和命名关键字参数
# 关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
# 如果要限制关键字参数的名字,就可以用命名关键字参数
map 与 reduce
map()
函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回.
返回的是map对象,结果要强制类型转换list(map())
reduce()
from functools import reduce
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,依此类推,最后得到一个结果。
sorted()排序函数
除关键参数外,还有两个常用参数:reverse=True、key=len/abs/.......
装饰器
装饰器就是定义的一个函数,返回的还是函数,加以修饰
装饰器最大的优势就是用于解决重复性的操作,其主要使用的场景有如下几个:
计算函数运行时间
给函数打日志
类型检查
当然,如果遇到其他重复操作的场景也可以类比使用装饰器
偏函数
from functools import partial
目录访问 import os
# 返回当前工作目录
os.getcwd()
os.path.abspath('')
# 改变当前工作目录
os.chdir('/home/aistudio/work')
# 是否为文件夹
os.path.isdir('/home/aistudio/work/today')
压缩文件
print('压缩作业开始了,请您耐心等待...')
infile = 'work/loren.txt'
outfile = 'work/myarchive.zip'
f = zipfile.ZipFile(outfile, 'w', zipfile.ZIP_DEFLATED)
f.write(infile)
f.close()
print('压缩作业结束了,请问还需要帮您做什么呢?')
面向对象编程----类和实例
访问受限
# 定义私有属性,两个下划线
# 类中访问私有属性必须通过类方法访问
#私有属性、私有方法不能直接访问
self.__health = health
python的内置方法
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
类属性和类方法
类中的属性分为:
实例属性:对象所有,互不干扰
类属性:类所有,所有对象共享
类中的方法分为:
实例方法:定义中有self 参数
类方法:定义中有cls 参数,使用@classmethod 装饰器
静态方法:定义中即没有self 参数,也没有cls 参数,使用@staticmethod 装饰器
访问类属性也必须用类方法
使用类的好处
降低复杂性-》更少的bug-》提高可维护行
类可以将数据与函数绑定在一起,使代码模块化
调用数据和函数,使用对象名.的方式,使代码更加优雅
代码通常称为类的方法,数据通常称为类的属性,实例化的对象称为实例
文件读取
with open(file_path, 'r') as f:
f.seek(0) # 手动定位,表示从第0个字符开始读取数据
f.read(10) # 从定位开始,读取10个字符
f.tell() # 返回当前定位
神经网络
高级API训练网络
一是定义输入数据形状大小和数据类型。
input_define = paddle.static.InputSpec(shape=[-1,3,224,224], dtype="float32", name="img")
label_define = paddle.static.InputSpec(shape=[-1,1], dtype="int64", name="label")
二是实例化模型。如果要用高阶API,需要用Paddle.Model()对模型进行封装
model = MyCNN()
model = paddle.Model(model,inputs=input_define,labels=label_define) #用Paddle.Model()对模型进行封装
三是定义优化器。优化器中的学习率(learning_rate)参数很重要。要是训练过程中得到的准确率呈震荡状态,忽大忽小,可以试试进一步把学习率调低。
optimizer = paddle.optimizer.Adam(learning_rate=0.0001, parameters=model.parameters())
四是准备模型。model.prepare()。
# 配置优化器、损失函数、评估指标
model.prepare(paddle.optimizer.Adam(learning_rate=0.008, parameters=model.parameters()),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())
model.prepare(optimizer=optimizer, #指定优化器
loss=paddle.nn.CrossEntropyLoss(), #指定损失函数
metrics=paddle.metric.Accuracy()) #指定评估方法
五是训练模型。model.fit()。
# 启动模型全流程训练
model.fit(train_dataset, # 训练数据集
eval_dataset, # 评估数据集
epochs=10, # 训练的总轮次
batch_size=64, # 训练使用的批大小
verbose=1, # 日志展示形式
callbacks=[visualdl]) # 设置可视化
model.fit(train_data=train_dataset, #训练数据集
eval_data=eval_dataset, #测试数据集
batch_size=64, #一个批次的样本数量
epochs=50, #迭代轮次
save_dir="/home/aistudio/lup", #把模型参数、优化器参数保存至自定义的文件夹
save_freq=20, #设定每隔多少个epoch保存模型参数及优化器参数
log_freq=100 #打印日志的频率
)