1、os.environ(): 获取系统的相关信息
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='1' # 默认,显示所有信息
os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 只显示warning 和error
os.environ['TF_CPP_MIN_LOG_LEVEL']='3' # 只显示error
注意:紧跟在import之后
2、全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
如果网站的SSL证书是经过CA认证的,则能够正常访问,如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,则需要添加忽略ssl证书验证。
3、tensorflow版本验证
assert tf.version.startswith('2.')是一个Python中的断言语句,用于检查当前运行的TensorFlow版本是否以"2."开头
4、Image.new(mode, size, color=0)
PIL包中图像的mode参数见PIL包中图像的mode参数 - zhangk1988 - 博客园 (cnblogs.com)
5、Img.fromarray()
Img.fromarray(obj (numpy.ndarray), mode (str))是实现array到image的转换
obj (numpy.ndarray): 一个二维numpy数组, 表示要转换为图像的数组。
mode (str): 一个字符串, 表示输出图像的模式。常用的模式有 “L” (灰度图), “RGB” (彩色图), “CMYK” (Cyan, Magenta, Yellow, blacK)。
6、open()
对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。
而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”。
7、astype函数:数据类型转化函数
x_train = x_train.astype("float32") / 255.0
8、tf.data.Dataset.from_tensor_slices
该函数是dataset核心函数之一,它的作用是把给定的元组、列表和张量等数据进行特征切片。切片的范围是从最外层维度开始的。如果有多个特征进行组合,那么一次切片是把每个组合的最外维度的数据切开,分成一组一组的。
假设我们现在有两组数据,分别是特征和标签,为了简化说明问题,我们假设每两个特征对应一个标签。之后把特征和标签组合成一个tuple,那么我们的想法是让每个标签都恰好对应2个特征,而且像直接切片,比如:[f11, f12] [t1]。f11表示第一个数据的第一个特征,f12表示第1个数据的第二个特征,t1表示第一个数据标签。那么tf.data.Dataset.from_tensor_slices就是做了这件事情
9、tf.train.batch() 按顺序读取队列中的数据
tf.train.shuffle_batch() 将队列中数据打乱后再读取出来.
10、文件读取函数ata_root.glob(‘*/*‘)
文件读取中 */* 即data_root.glob(‘*/*‘)
11、os.path.exists()
os即operating system(操作系统),Python 的 os 模块封装了常见的文件和目录操作。
os.path.exists()就是判断括号里的文件是否存在的意思,括号内的可以是文件路径。
如果存在,返回TRUE,不存在,返回的则是FALSE
12、shutil.rmtree()
用于删除shutil.rmtree(路径,ignore_errors=False,οnerrοr=None) 参数: 路径:表示文件路径的类路径对象。类似路径的对象是表示路径的字符串或字节对象整个目录树,路径必须指向一个目录(但不是指向一个目录的符号链接)。
13、os.listdir()
用于返回指定文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序,不包括‘.’和‘…’即使其在文件夹中。
注意,返回的是目标文件夹中包含的文件或文件夹的名字,通常用于提取文件夹中文件,用一个循环遍历所有文件。
14、os.path.join()函数
#os.path.join()函数用于路径拼接文件路径,可以传入多个路径
#如果不存在以‘’/’开始的参数,则函数会自动加上
>>> import os
>>> print(os.path.join('path','abc','yyy'))
path\abc\yyy
#存在以‘’/’’开始的参数,从最后一个以”/”开头的参数开始拼接,之前的参数全部丢弃。
>>> print('1',os.path.join('aaa','/bbb','ccc.txt'))
1 /bbb\ccc.txt
>>> print('1',os.path.join('/aaa','/bbb','ccc.txt'))
1 /bbb\ccc.txt
>>> print('1',os.path.join('/aaa','/bbb','/ccc.txt'))
1 /ccc.txt
>>> print('1',os.path.join('/aaa','bbb','ccc.txt'))
1 /aaa\bbb\ccc.txt
>>> print('1',os.path.join('/aaa','bbb','/ccc.txt'))
1 /ccc.txt
#同时存在以‘’./’与‘’/’’开始的参数,以‘’/’为主,从最后一个以”/”开头的参数开始拼接,之前的参数全部丢弃。
>>> print('2',os.path.join('/aaa','./bbb','ccc.txt'))
2 /aaa\./bbb\ccc.txt
>>> print('2',os.path.join('aaa','./bbb','/ccc.txt'))
2 /ccc.txt
#只存在以‘’./’开始的参数,会从”./”开头的参数的上一个参数开始拼接。
>>> print('2',os.path.join('aaa','./bbb','ccc.txt'))
2 aaa\./bbb\ccc.txt
#注意:
path='C:/yyy/yyy_data/'
>>> print(os.path.join(path,'/abc'))
C:/abc
>>> print(os.path.join(path,'abc'))
C:/yyy/yyy_data/abc
15、Random中Sample()函数的用法
sample(list,k)返回一个列表,列表长度为k,列表的值在原list中任选k个
import random
list = [1, 2, 3]
print(random.sample(list ,2))
list = ["china","python","sky"]
print(random.sample(list ,2))
list = range(1, 10000)
print(random.sample(list ,5))
输出:
[1, 2]
['python', 'sky']
[6912, 1869, 5991, 721, 3388]
16、with as语句用法
with…as,就是个python控制流语句,像 if ,while一样。
with…as语句是简化版的try except finally语句。
实际上,try…except语句和try…finally语句是两种语句,用于不同的场景。但是当二者结合在一起时,可以“实现稳定性和灵活性更好的设计”。
1. try…except语句
用于处理程序执行过程中的异常情况,比如语法错误、从未定义变量上取值等等。例如:
try:
a = 1 / 2 #a normal number/variable
print(a)
print(m) # 此处抛出python标准异常
b = 1 / 0 # an abnormal number/variable
print(b)
c = 2 / 1 # a normal number/variable
print(c)
except NameError:
print("Ops!!")
except:
print("Error")
输出:
0.5
Ops!!
Error
先执行try后面这一堆语句,由上至下:
step1: a 正常,打印a. 于是打印出0.5 (python3.x以后都输出浮点数)
step2: b, 不正常了,0 不能做除数,所以这是一个错误。直接跳到except报错去。于是打印了Error。
step3: 其实没有step3,因为程序结束了。c是在错误发生之后的b语句后才出现,根本轮不到执行它。也就看不到打印出的c了。
2. try…finallly语句
用于无论执行过程中有没有异常,都要执行清场工作。
他两合在一起的用法:
try:
a = 1 / 2
print(a)
print(m) # 抛出NameError异常,执行第一个错误,并输出Ops!!
b = 1 / 0
print(b) #识别到第二个错误,仍然执行此行,但不报任何信息
c = 2 / 1
print(c) #识别到第三个错误,仍然执行此行,但不报任何信息
except NameError:
print("Ops!!") # 捕获到异常
except ZeroDivisionError:
print("Wrong math!!")
except:
print("Error") ##识别到其他所有错误,仍然执行,但不报任何信息
else:
print("No error! yeah!")#如果没有任何错误将输出No error Yeah,但实际上有错误被忽略了,所以不输出
finally: # 是否异常都执行该代码块
print("Successfully!")
输出:
0.5
Ops!!
Successfully!
3. with…as语句
语句结构如下:
with expression [as variable]:
with-block
17、tqdm模块中的tqdm函数
tqdm.tqdm
返回一个迭代器iterable
#demo code
from tqdm import tqdm
import time
iterator = tqdm(iterable=range(10),
desc=None,
total=None,
leave=True,
ncols=None,
mininterval=0.1,
maxinterval=10.0,
unit='it',
bar_format=None,
position=None,
postfix=None)
for i in iterator:
time.sleep(0.3)
iterable:tdqm数据参数支持的数据类型是可迭代的对象iterable,在Python中默认的可迭代对象有:list、str、tuple、dict、file、range等
desc:str类型,作为进度条说明,在进度条左边
total:预取的迭代次数
leave=True:循环结束后是否保留进度提示信息,默认保留
ncols:进度条长度,150比较适合
mininterval=0.1:进度条最小的更新间隔(秒)
maxinterval=10.0:进度条最大的更新间隔(秒)
unit=‘it’:单位,默认it每秒迭代数
postfix:在进度条右边添加字典类型描述信息
position:指定偏移,这个功能在多个进度条中有用
bar_format:自定义进度条
bar_format='{l_bar}{bar}{r_bar}'
l_bar: {desc}: {percentage:3.0f}%|
bar: 进度条
r_bar: |{n_fmt}/{total_fmt}[{elapsed}<{remaining},{rate_fmt}{postfix}]
100%|█████████████████| 3/3 [00:03<00:00, 1.00s/it]
- percentage:百分比
- n_fmt:当前数
- total_fmt:总数
- elapsed:消耗的时间
- remaining:剩余时间
- rate_fmt:速率
- postifx:后缀字典描述
- desc、postfix默认为空;
18、tf.image.resize_with_pad使用方法
作用
~~~~ 调整图像大小并将图像填充到目标宽度和高度。
~~~~ 通过保持纵横比不变而不失真,将图像大小调整为目标宽度和高度。 如果目标尺寸与图像尺寸不匹配,则会调整图像大小,然后用零填充以匹配请求的尺寸。
tf.image.resize_with_pad(
image, # 形状 [batch, height, width, channels] 的 4-D 张量或形状 [height, width, channels] 的 3-D 张量。
target_height, # 目标高度
target_width, # 目标宽度
method=ResizeMethod.BILINEAR, # 用于调整图像大小的方法。 见 image.resize()
antialias=False # 调整大小时是否使用抗锯齿。 参见“image.resize()”。
)