文件读取处理
with open ( 'resources/training_log.txt' , 'r' ) as file :
content = file . read( )
print ( content)
with open ( 'resources/training_log.txt' , 'r' , encoding= 'utf-8' ) as file :
content = file . read( )
print ( content)
运行效果:
俺啥都奥多拉拉飞机
秦时明月汉时关,
万里长征人未还。
但使龙城飞将在,
不教胡马度阴山。
with open ( 'resources/training_log.txt' , 'r' ) as file :
line = file . readline( )
print ( line)
while line:
print ( line, end= '' )
line = file . readline( )
运行效果:
俺啥都奥多拉拉飞机
俺啥都奥多拉拉飞机
秦时明月汉时关,
万里长征人未还。
但使龙城飞将在,
不教胡马度阴山。
使用 readlines 读取多行信息,会将所有信息拼接成一个列表:
with open ( 'resources/training_log.txt' , 'r' ) as file :
lines = file . readlines( )
print ( lines)
for line in lines:
print ( line, end= '' )
运行效果:
[ '俺啥都奥多拉拉飞机\n' , '秦时明月汉时关,\n' , '万里长征人未还。\n' , '但使龙城飞将在,\n' , '不
教胡马度阴山。']
俺啥都奥多拉拉飞机
秦时明月汉时关,
万里长征人未还。
但使龙城飞将在,
不教胡马度阴山。
文件写入处理
with open ( 'resources/example_1.txt' , 'w' ) as file :
file . write( "Hello, World!" )
运行效果:
resources目录下多了一个example_1. txt文件,内容为 “Hello, World!”
使用 ‘writelines’ 方法写入多行文件:
lines = [ "Hello, World!" , "Welcome to Python programming." ]
with open ( 'resources/example_2.txt' , 'w' ) as file :
file . writelines( line + '\n' for line in lines)
运行效果:
resources目录下多了一个example_2. txt文件,内容为
Hello, World!
Welcome to Python programming.
日志文件读写
写一段代码,模拟生成 accurary 逐步上升、loss 逐步下降的训练日志,并将日志信息记录到 training_log.txt 中:
import random
epoch = 100
accuracy = 0.5
loss = 0.9
with open ( 'training_log.txt' , 'w' ) as f:
f. write( 'Epoch\tAccuracy\tLoss\n' )
for epoch_i in range ( 1 , epoch+ 1 ) :
accuracy += random. uniform( 0 , 0.005 )
loss -= random. uniform( 0 , 0.005 )
accuracy = min ( 1 , accuracy)
loss = max ( 0 , loss)
f. write( f' { epoch_i} \t { accuracy: .3f } \t { loss: .3f } \n' )
print ( f'Epoch: { epoch_i} , Accuracy: { accuracy} , Loss: { loss} ' )
运行结果:
Epoch: 1 , Accuracy: 0.501179283434492 , Loss: 0.8968876573254405
Epoch: 2 , Accuracy: 0.5012701446173562 , Loss: 0.892587190207276
Epoch: 3 , Accuracy: 0.5015028116406762 , Loss: 0.8908834919247945
Epoch: 4 , Accuracy: 0.5058295280112071 , Loss: 0.8885752496845984
Epoch: 5 , Accuracy: 0.5107747387348778 , Loss: 0.8875305056385812
Epoch: 6 , Accuracy: 0.5134465523544417 , Loss: 0.8859972537197854
Epoch: 7 , Accuracy: 0.5146851947399464 , Loss: 0.8814020451165393
Epoch: 8 , Accuracy: 0.5154084829391488 , Loss: 0.8766349678804274
Epoch: 9 , Accuracy: 0.518524659425188 , Loss: 0.8735754670347503
Epoch: 10 , Accuracy: 0.5200278427804359 , Loss: 0.8711413616408478
生成 training_log. txt 文件内容为
Epoch Accuracy Loss
1 0.501 0.897
2 0.501 0.893
3 0.502 0.891
4 0.506 0.889
5 0.511 0.888
6 0.513 0.886
7 0.515 0.881
8 0.515 0.877
9 0.519 0.874
10 0.520 0.871
pandas 表格数据处理
pip install pandas
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simple pandas
pip install openpyxl
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simple openpyxl
pandas表格读取与数据处理
import pandas as pd
data_loc = r'./resources/yolov5s.csv'
data = pd. read_csv( data_loc)
print ( data)
运行结果:
epoch train/ box_loss . . . x/ lr1 x/ lr2
0 0 0.103060 . . . 0.000900 0.091900
1 1 0.076159 . . . 0.001810 0.083710
2 2 0.066722 . . . 0.002718 0.075518
3 3 0.062263 . . . 0.003623 0.067323
4 4 0.057136 . . . 0.004524 0.059124
. . . . . . . . . . . . . . . . .
95 95 0.026012 . . . 0.001080 0.001080
96 96 0.026545 . . . 0.001055 0.001055
97 97 0.026161 . . . 0.001035 0.001035
98 98 0.026270 . . . 0.001020 0.001020
99 99 0.025782 . . . 0.001009 0.001009
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
print ( data)
运行结果:
顾客编号 大类编码 大类名称 中类编码 中类名称 小类编码 . . . 商品类型 单位
销售数量 销售金额 商品单价 是否促销
0 0.0 12.0 蔬果 1201.0 蔬菜 120109.0 . . . 生鲜 个 8.000 4.00 2.00
否
1 1.0 20.0 粮油 2014.0 酱菜类 201401.0 . . . 一般商品 袋 6.000 3.00 0.50
否
2 2.0 15.0 日配 1505.0 冷藏乳品 150502.0 . . . 一般商品 袋 1.000 2.40 2.40 否
3 3.0 15.0 日配 1503.0 冷藏料理 150305.0 . . . 一般商品 袋 1.000 6.50 8.30 否
4 4.0 15.0 日配 1505.0 冷藏乳品 150502.0 . . . 一般商品 袋 1.000 11.90 11.90 否
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42811 1605.0 12.0 蔬果 1201.0 蔬菜 120106.0 . . . 生鲜 千克 0.217 3.91 18.00 否
42812 1572.0 12.0 蔬果 1201.0 蔬菜 120102.0 . . . 生鲜 千克 0.440 0.86 1.96 否
42813 1170.0 30.0 洗化 3016.0 纸制品 301603.0 . . . 一般商品 提 1.000 12.90 14.50 是
42814 2605.0 12.0 蔬果 1201.0 蔬菜 120101.0 . . . 生鲜 千克 0.718 1.84 2.56 否
42815 2610.0 23.0 酒饮 2317.0 进口饮料 231702.0 . . . 联营商品 罐 1.000 8.00 8.00 否
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
headInfo = data. head( )
print ( headInfo)
运行结果:
顾客编号 大类编码 大类名称 中类编码 中类名称 小类编码 小类名称 销售日期 销售月份 商品编码 规格型号 商品类型 单位
销售数量 销售金额 商品单价 是否促销
0 0.0 12.0 蔬果 1201.0 蔬菜 120109.0 其它蔬菜 20150101.0 201501.0 DW- 1201090311 生鲜 个 8.0 4.0 2.0 否
1 1.0 20.0 粮油 2014.0 酱菜类 201401.0 榨菜 20150101.0 201501.0 DW- 2014010019 60g 一般商品 袋 6.0 3.0 0.5 否
2 2.0 15.0 日配 1505.0 冷藏乳品 150502.0 冷藏加味酸乳 20150101.0 201501.0 DW- 1505020011 150g 一般商品 袋 1.0 2.4 2.4 否
3 3.0 15.0 日配 1503.0 冷藏料理 150305.0 冷藏面食类 20150101.0 201501.0 DW- 1503050035 500g 一般商品 袋 1.0 6.5 8.3 否
4 4.0 15.0 日配 1505.0 冷藏乳品 150502.0 冷藏加味酸乳 20150101.0 201501.0 DW- 1505020020 100g* 8 一般商品 袋 1.0 11.9 11.9 否
注:head 传入数字几,就表示输出前几行信息 读取 excel 表格 数据,输出尾几行信息
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
tailInfo = data. tail( )
print ( tailInfo)
运行结果:
顾客编号 大类编码 大类名称 中类编码 中类名称 小类编码 小类名称 销售日期 销售月份 商品编码 规格型号 商品类型 单
位 销售数量 销售金额 商品单价 是否促销
42811 1605.0 12.0 蔬果 1201.0 蔬菜 120106.0 菌菇类 20150430.0 201504.0 DW- 1201060002 散称 生鲜 千克 0.217 3.91 18.00 否
42812 1572.0 12.0 蔬果 1201.0 蔬菜 120102.0 根茎 20150430.0 201504.0 DW- 1201020040 散称 生鲜 千克 0.440 0.86 1.96 否
42813 1170.0 30.0 洗化 3016.0 纸制品 301603.0 无芯纸 20150430.0 201504.0 DW- 3016030007 10 卷 一般商品 提 1.000 12.90 14.50 是
42814 2605.0 12.0 蔬果 1201.0 蔬菜 120101.0 叶菜 20150430.0 201504.0 DW- 1201010023 散称 生鲜 千克 0.718 1.84 2.56 否
42815 2610.0 23.0 酒饮 2317.0 进口饮料 231702.0 进口果汁 20150430.0 201504.0 DW- 2317020131 490ml 联营商品 罐 1.000 8.00 8.00 否
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_0 = data. loc[ 0 ]
print ( data_0)
运行结果:
顾客编号 0.0
大类编码 12.0
大类名称 蔬果
中类编码 1201.0
中类名称 蔬菜
小类编码 120109.0
小类名称 其它蔬菜
销售日期 20150101.0
销售月份 201501.0
商品编码 DW- 1201090311
规格型号
商品类型 生鲜
单位 个
销售数量 8.0
销售金额 4.0
商品单价 2.0
是否促销 否
Name: 0 , dtype: object
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_1 = data. loc[ : , "大类编码" ]
print ( data_1)
运行结果:
0 12.0
1 20.0
2 15.0
3 15.0
4 15.0
. . .
42811 12.0
42812 12.0
42813 30.0
42814 12.0
42815 23.0
Name: 大类编码, Length: 42816 , dtype: float64
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_2 = data. loc[ 1 , "大类编码" ]
print ( data_2)
运行结果:
20.0
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_3 = data. loc[ 1 : 3 , "大类编码" : "中类名称" ]
print ( data_3)
运行结果:
大类编码 大类名称 中类编码 中类名称
1 20.0 粮油 2014.0 酱菜类
2 15.0 日配 1505.0 冷藏乳品
3 15.0 日配 1503.0 冷藏料理
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_4 = data. loc[ data[ "销售数量" ] > 10 ]
print ( data_4)
运行结果:
顾客编号 大类编码 大类名称 中类编码 中类名称 小类编码 小类名称 . . . 规格型号 商品类型 单位
销售数量 销售金额 商品单价 是否促销
22 19.0 15.0 日配 1518.0 常温乳品 151805.0 利乐枕纯奶 . . . 240ml 一般商品 袋 16.0 33.9 2.7
是
51 33.0 15.0 日配 1518.0 常温乳品 151805.0 利乐枕纯奶 . . . 240ml 一般商品 袋 16.0 43.2 2.7
否
437 116.0 15.0 日配 1518.0 常温乳品 151813.0 利乐砖乳酸菌 . . . 205g 一般商品 盒 12.0 49.0 5.5 是
478 66.0 15.0 日配 1518.0 常温乳品 151807.0 利乐枕营养奶 . . . 240ml 一般商品 袋 16.0 44.8 2.8 否
488 86.0 20.0 粮油 2015.0 罐头 201501.0 八宝粥 . . . 360g 一般商品 个 12.0 38.4 3.2 否. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42444 2601.0 15.0 日配 1518.0 常温乳品 151806.0 利乐枕加味奶 . . . 230ml 一般商品 袋 16.0 29.9 2.8 是
42500 1973.0 15.0 日配 1518.0 常温乳品 151813.0 利乐砖乳酸菌 . . . 200ml 一般商品 盒 12.0 58.9 5.3 是
42509 1631.0 15.0 日配 1521.0 蛋类 152101.0 新鲜蛋品 . . . 散称 一般商品 kg 10.1 141.4 14.0 否
42746 421.0 15.0 日配 1505.0 冷藏乳品 150502.0 冷藏加味酸乳 . . . 150g 一般商品 袋 15.0 26.9 2.4 是
42757 74.0 15.0 日配 1518.0 常温乳品 151803.0 利乐砖营养奶 . . . 250ml 一般商品 盒 24.0 79.2 3.3 否
读取 excel 表格 数据,提取符合要求的元素(切片)
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_5 = data. loc[ data[ "销售数量" ] > 10 , [ "小类编码" , "小类名称" ] ]
print ( data_5)
运行结果:
小类编码 小类名称
22 151805.0 利乐枕纯奶
51 151805.0 利乐枕纯奶
437 151813.0 利乐砖乳酸菌
478 151807.0 利乐枕营养奶
488 201501.0 八宝粥
. . . . . . . . .
42444 151806.0 利乐枕加味奶
42500 151813.0 利乐砖乳酸菌
42509 152101.0 新鲜蛋品
42746 150502.0 冷藏加味酸乳
42757 151803.0 利乐砖营养奶
[ 682 rows x 2 columns]
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_extract = data. groupby( '商品类型' ) [ '销售金额' ] . sum ( )
data_extract = data_extract. reset_index( )
print ( data_extract)
运行结果:
商品类型 销售金额
0 一般商品 336529.74
1 生鲜 111808.70
2 联营商品 5873.81
读取 excel 表格 数据,将处理好的数据保存成 excel
import pandas as pd
data_loc = r'./resources/销售数据.xlsx'
data = pd. read_excel( data_loc)
data_extract = data. groupby( '商品类型' ) [ '销售金额' ] . sum ( )
data_extract = data_extract. reset_index( )
data_extract. to_csv( "处理好的表格.csv" , index= False )
data_extract. to_excel( "处理好的表格.xlsx" , index= False )
注 :
表格中有中文一定要加 “encoding=‘gbk’”,实测不加貌似也行 不保存表格左边的序号列加 “index=False”
Matplotlib 常用画图处理
pip install matplotlib
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simple matplotlib
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simple numpy
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simple kiwisolver
绘制折线图
import numpy as np
import matplotlib. pyplot as plt
x = np. arange( - 2 * np. pi, 2 * np. pi, 0.01 )
y = np. sin( x)
plt. figure( )
plt. plot( x, y)
plt. title( 'sin(x)' )
plt. xlabel( 'x' )
plt. ylabel( 'sin(x)' )
plt. grid( True )
plt. show( )
import pandas as pd
import matplotlib. pyplot as plt
data_loc = r'resources/yolov5s.csv'
data = pd. read_csv( data_loc, index_col= 0 )
train_bbox_loss = data[ ' train/box_loss' ]
x_list = [ i for i in range ( len ( train_bbox_loss) ) ]
plt. plot( x_list, train_bbox_loss)
plt. xlabel( 'Epoch' )
plt. ylabel( 'Loss' )
plt. title( 'YOLOv5s' )
plt. show( )
import pandas as pd
import matplotlib. pyplot as plt
file_1_loc = 'resources/yolov5l.csv'
file_2_loc = 'resources/yolov5m.csv'
file_3_loc = 'resources/yolov5s.csv'
file_1 = pd. read_csv( file_1_loc)
file_2 = pd. read_csv( file_2_loc)
file_3 = pd. read_csv( file_3_loc)
file_1_train_box_loss = file_1[ ' train/box_loss' ]
file_2_train_box_loss = file_2[ ' train/box_loss' ]
file_3_train_box_loss = file_3[ ' train/box_loss' ]
x_list = [ i for i in range ( len ( file_1_train_box_loss) ) ]
plt. plot( x_list, file_1_train_box_loss)
plt. plot( x_list, file_2_train_box_loss)
plt. plot( x_list, file_3_train_box_loss)
plt. xlabel( "Epoch" )
plt. ylabel( "Loss" )
plt. title( "Train box_loss" )
plt. grid( )
plt. legend( [ 'yolov5l' , 'yolov5m' , 'yolov5s' ] )
plt. show( )
import matplotlib. pyplot as plt
import numpy as np
num_points = 100
x = np. random. rand( num_points)
y = np. random. rand( num_points)
colors = np. random. rand( num_points)
sizes = 1000 * np. random. rand( num_points)
alphas = np. random. rand( num_points)
plt. scatter( x, y, c= colors, s= sizes, alpha= 0.5 , cmap= 'viridis' )
plt. colorbar( )
plt. show( )
import matplotlib. pyplot as plt
import numpy as np
labels = [ 'A' , 'B' , 'C' , 'D' , 'E' ]
values = [ 3 , 7 , 2 , 5 , 8 ]
x = np. arange( len ( labels) )
plt. bar( x, values, color= 'blue' , align= 'center' , alpha= 0.7 )
plt. title( 'Simple Bar Chart' )
plt. xlabel( 'Labels' )
plt. ylabel( 'Values' )
plt. xticks( x, labels)
plt. show( )
import matplotlib. pyplot as plt
sizes = [ 15 , 30 , 45 , 10 ]
labels = [ 'A' , 'B' , 'C' , 'D' ]
colors = [ 'gold' , 'yellowgreen' , 'lightcoral' , 'lightskyblue' ]
explode = ( 0.1 , 0 , 0 , 0 )
plt. pie(
sizes,
explode= explode,
labels= labels,
colors= colors,
autopct= '%1.1f%%' ,
shadow= True ,
startangle= 140
)
plt. axis( 'equal' )
plt. show( )
OpenCV 影像数据处理
作用:用于处理图片及视频文件 安装 opencv-python
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simpleopencv- python== 4.5 .36
图像数据处理
import cv2
img_path = r'resources/food.png'
image_color = cv2. imread( img_path)
image_gray = cv2. imread( img_path, cv2. IMREAD_GRAYSCALE)
cv2. imshow( 'Color Image' , image_color)
cv2. waitKey( 0 )
cv2. destroyAllWindows( )
注意:
imread第二个参数不加会默认以彩色模式展示图片
图片缩放
import cv2
image = cv2. imread( 'resources/food.png' )
if image is None :
print ( "Error: Could not load image." )
exit( )
print ( image. shape)
original_height, original_width = image. shape[ : 2 ]
new_width = int ( original_width / 2 )
new_height = int ( original_height / 2 )
resized_image = cv2. resize( image, ( new_width, new_height) , interpolation= cv2. INTER_AREA)
cv2. imshow( 'Original Image' , image)
cv2. imshow( 'Resized Image' , resized_image)
cv2. waitKey( 0 )
cv2. destroyAllWindows( )
import cv2
image = cv2. imread( 'resources/food.png' )
rotated_90 = cv2. rotate( image, cv2. ROTATE_90_CLOCKWISE)
rotated_180 = cv2. rotate( image, cv2. ROTATE_180)
rotated_270 = cv2. rotate( image, cv2. ROTATE_90_COUNTERCLOCKWISE)
cv2. imshow( 'original' , image)
cv2. imshow( '90 degree' , rotated_90)
cv2. imshow( '180 degree' , rotated_180)
cv2. imshow( '270 degree' , rotated_270)
cv2. waitKey( 0 )
import cv2
image = cv2. imread( 'resources/food.png' )
if image is not None :
cv2. imwrite( 'output_image.png' , image)
else :
print ( "无法读取图像" )
视频数据处理
import cv2
cap = cv2. VideoCapture( 0 )
while True :
ret, frame = cap. read( )
if ret:
cv2. imshow( 'Frame' , frame)
if cv2. waitKey( 15 ) & 0xFF == ord ( 'q' ) :
break
cap. release( )
cv2. destroyAllWindows( )
import cv2
cap = cv2. VideoCapture( 0 )
if not cap. isOpened( ) :
print ( "Error: Could not open camera." )
exit( )
frame_width = int ( cap. get( cv2. CAP_PROP_FRAME_WIDTH) )
frame_height = int ( cap. get( cv2. CAP_PROP_FRAME_HEIGHT) )
fourcc = cv2. VideoWriter_fourcc( * 'mp4v' )
out = cv2. VideoWriter( 'output.mp4' , fourcc, 20.0 , ( frame_width, frame_height) )
while True :
ret, frame = cap. read( )
if not ret:
print ( "Failed to grab frame." )
break
out. write( frame)
cv2. imshow( 'frame' , frame)
if cv2. waitKey( 1 ) & 0xFF == ord ( 'q' ) :
break
cap. release( )
out. release( )
cv2. destroyAllWindows( )
综合案例:视频处理
用 OpenCV 打开一段视频,将每一帧画面压缩成 540p,对画面进行垂直翻转,转为黑白,然后添加高斯噪音,把处理好的每一帧画面保存成一个mp4文件
import cv2
import numpy as np
def add_gaussian_noise ( image) :
row, col = image. shape
mean = 0
sigma = 15
gauss = np. random. normal( mean, sigma, ( row, col) )
noisy = image + gauss
noisy_img = np. clip( noisy, 0 , 255 )
return noisy_img. astype( np. uint8)
input_video = 'resources/outdoor.mp4'
output_video = 'resources/output.mp4'
cap = cv2. VideoCapture( input_video)
fps = int ( cap. get( cv2. CAP_PROP_FPS) )
frame_width = int ( cap. get( cv2. CAP_PROP_FRAME_WIDTH) )
frame_height = int ( cap. get( cv2. CAP_PROP_FRAME_HEIGHT) )
new_height = 540
new_width = int ( ( new_height / frame_height) * frame_width)
fourcc = cv2. VideoWriter_fourcc( * 'mp4v' )
out = cv2. VideoWriter( output_video, fourcc, fps, ( new_width, new_height) , isColor= False )
while True :
ret, frame = cap. read( )
if not ret:
break
frame = cv2. resize( frame, ( new_width, new_height) )
frame = cv2. cvtColor( frame, cv2. COLOR_BGR2GRAY)
frame = cv2. flip( frame, 1 )
frame = add_gaussian_noise( frame)
out. write( frame)
cap. release( )
out. release( )
cv2. destroyAllWindows( )
pickle 文件处理:数据序列化处理
pickle 文件是一种特殊的文件格式,用于在 Python 中序列化(serialization)和反序列化(deserialization)Python 对象。序列化是将对象转换为字节流的过程,而反序列化则是从字节流中重新构造对象的过程。 pickle 模块提供了一个功能强大的序列化和反序列化工具,可以将几乎所有 Python 对象转换为字节流,然后存储到文件中,也可以从文件中加载这些字节流并重新构造出原始对象。 pickle 文件的扩展名通常是 .pkl,.pickle 或者其他类似的扩展名。这些文件可以包含任意 Python 对象的序列化表示,例如字典、列表、类实例等等。pickle 文件在数据持久化、数据传输和对象传递等场景中非常有用,可以轻松地保存和恢复 Python 对象的状态和数据。
pickle 文件操作
import pickle
data = {
'name' : 'John' ,
'age' : 30 ,
'is_student' : False ,
'grades' : [ 85 , 90 , 78 , 92 ]
}
with open ( 'data.pkl' , 'wb' ) as file :
pickle. dump( data, file )
运行效果:
生成 data. pkl 文件
import pickle
with open ( 'data.pkl' , 'rb' ) as file :
loaded_data = pickle. load( file )
运行效果:
{ 'name' : 'John' , 'age' : 30 , 'is_student' : False , 'grades' : [ 85 , 90 , 78 , 92 ] }
综合案例:pickle实战,数据序列化
当训练人工智能算法时,往往需要很长时间,当训练中断时,如果能提前做好权重保存功能,能很快恢复上次进度,以继续进行训练
import pickle
import time
import os
import numpy as np
def calculate_weights ( ) :
print ( "开始计算权重..." )
time. sleep( 5 )
weights = np. random. rand( 10 , 10 )
print ( "权重计算完成." )
return weights
def save_weights ( weights, epoch, filename= 'weights.pkl' ) :
data = { 'weights' : weights, 'epoch' : epoch}
with open ( filename, 'wb' ) as f:
pickle. dump( data, f)
print ( f"权重和epoch已保存到 { filename} ." )
def load_weights ( filename= 'weights.pkl' ) :
with open ( filename, 'rb' ) as f:
data = pickle. load( f)
print ( f"权重和epoch已从 { filename} 加载." )
return data[ 'weights' ] , data[ 'epoch' ]
def main ( ) :
weights_file = 'weights.pkl'
total_epochs = 100
if os. path. exists( weights_file) :
weights, start_epoch = load_weights( weights_file)
else :
weights = calculate_weights( )
start_epoch = 0
for epoch in range ( start_epoch, total_epochs) :
print ( f"开始训练epoch { epoch} ..." )
time. sleep( 1 )
print ( f"完成训练epoch { epoch} ." )
save_weights( weights, epoch, weights_file)
if __name__ == '__main__' :
main( )
运行结果:
权重和epoch已保存到weights. pkl.
开始训练epoch 72. . .
完成训练epoch 72.
权重和epoch已保存到weights. pkl.
开始训练epoch 73. . .
权重和epoch已从weights. pkl加载.
开始训练epoch 72. . .
完成训练epoch 72.
权重和epoch已保存到weights. pkl.
开始训练epoch 73. . .
完成训练epoch 73.
权重和epoch已保存到weights. pkl.
PyQt 安装与构建用户界面
在Python中使用PyQt可以快速搭建自己的应用,使得软件有可视化结果\
PyQt 安装与运行
pip install pyQt5 - i https: // pypi. tuna. tsinghua. edu. cn/ simple
pip install pyqt5- tools - i https: // pypi. tuna. tsinghua. edu. cn/ simple - - user
Python GUI 快速入门
点击PyCharm 的 File -> Settings -> Tools -> External tools 打开外部工具页面
点击 + 号进入外部工具页面
在”Name"处输入命名,这个名称随便取,只要自己清楚就行
在python安装目录下的Libsite-packagespyqt5_tools文件夹里找到安装的designer.exe所在的路径
PyQt 制作界面实战,图片展示功能
from QtTest import Ui_MainWindow
import sys
from PyQt5. QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5 import_ QtGui
class CamShow ( QMainWindow, Ui_MainWindow) :
def __init__ ( self, parent= None ) :
super ( CamShow, self) . __init__( parent)
self. setupUi( self)
self. OpenFileBtn. clicked. connect( self. loadImage)
def loadImage ( self) :
print ( "按钮被按下了" )
self. fname, _ = QFileDialog. getOpenFileName( self, caption: '选择图片' , directory: '.' , filter : '图像文件(*.jpg *.png)' )
print ( self. fname)
pix = QtGui. QPixmap( self. fname) . scaled( self. ImgeLabel. width( ) , self. ImgeLabel. height( ) )
self. ImgeLabel. setPixmap( pix)
if __name__ == '__main__' :
app = QApplication( sys. argv)
ui= CamShow( )
ui. show( )
sys. exit( app. exec_( ) )
优化 PyQt 构建用户界面应用程序
调节界面大小:手动调节即可,然后重新执行.ui和mian.py
PyQt 制作界面代码完善
from QtTest import Ui_MainWindow
import sys
from PyQt5. QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from PyQt5 import QtGui
class CamShow ( QMainWindow, Ui_MainWindow) :
def __init__ ( self, parent= None ) :
super ( CamShow, self) . __init__( parent)
self. setupUi( self)
self. OpenFileBtn. clicked. connect( self. loadImage)
self. actionOpen. triggered. connect( self. loadImage)
self. actionexit. triggered. connect( self. exit)
self. actionabout. triggered. connect( self. about)
def loadImage ( self) :
self. infolabel. setText( "打开文件按钮被按下了" )
self. fname, _ = QFileDialog. getOpenFileName( self, caption= '选择图片' , directory= '.' , filter = '图像文件(*.jpg *.png)' )
print ( self. fname)
pix = QtGui. QPixmap( self. fname) . scaled( self. ImgeLabel. width( ) , self. ImgeLabel. height( ) )
self. ImgeLabel. setPixmap( pix)
def exit ( self) :
sys. exit( app. exec_( ) )
def about ( self) :
self. infolabel. setText( "帮助按钮被按下了" )
QMessageBox. information( self, title= '软件说明' , text= '该软件由xxx制作而成,软件版本为1.0' )
if __name__ == '__main__' :
app = QApplication( sys. argv)
ui = CamShow( )
ui. show( )
sys. exit( app. exec_( )
最后: