首页 > 编程语言 >【python机器学习课程设计】狗的品种识别

【python机器学习课程设计】狗的品种识别

时间:2022-12-23 01:22:07浏览次数:64  
标签:课程设计 猎犬 img python list train model 识别 type

一、选题背景

近年来,随着生活水平的提高,狗作为参加的宠物品种慢慢步入了中国千万家庭中。而狗的品种识别案例可以帮助我们了解狗品种的差异特征,并使用机器学习技术来分析这些差异特征,从而提高对狗狗品种的识别能力。这对于狗养成有很大的帮助:

狗的品种识别案例可以提高人们对狗狗的了解,并帮助人们更好地预防狗的疾病和保护狗狗健康。

狗的品种识别案例可以帮助人们对狗狗品种进行更准确的识别,进而更好地进行狗狗的饲养和繁殖,从而帮助相关行业发展。

狗狗图像品种识别案例可以帮助我们提高对图像处理和机器学习技术的理解,并帮助我们更好地应用这些技术。

二、机器学习案例设计方案

从网站中下载相关的数据集,对数据集进行整理,在python的环境中,给数据集中的文件进行划分,对数据进行预处理,利用keras,构建神经网络,训练模型,导入图片测试模型。

数据来源:斯坦福大学狗的数据集,网址:Stanford Dogs dataset for Fine-Grained Visual Categorization

数据集包含了120种狗的jpg,一共有20580张相片数据。

三、机器学习的实验步骤

1.下载数据集

2.导入需要用到的库

import os
import numpy as np
from PIL import Image
from keras.models import Sequential
from keras.layers import Convolution2D, Flatten, Dropout, MaxPooling2D,Dense,Activation
from keras.optimizers import Adam
from keras.utils import np_utils
from keras.models import load_model
import matplotlib.image as processimage
import matplotlib.pyplot as plt

3.将数据集中的数据按品种分类、重命名、预处理

 

DogType = ['阿芬平嘉犬','阿富汗猎犬','阿拉斯加雪橇犬','阿彭则牧牛犬','艾尔谷犬','爱尔兰梗','爱尔兰猎狼犬',
               '爱尔兰软毛梗犬','爱尔兰水猎犬','爱尔兰雪达犬','爱斯基摩犬','奥达猎犬','澳大利亚卡尔比犬',
               '澳洲梗','澳洲野犬','巴吉度猎犬','巴仙吉犬','北京狮子狗','贝林顿梗','比格犬','比利时犬',
               '庇里牛斯大狗','边境牧羊犬','标准贵宾犬','波士顿斗牛犬','伯德梗','伯恩山犬','博美犬','布里犬',
               '布列塔尼猎犬','布鲁塞尔格林芬犬','布鲁泰克浣熊犬','布伦海姆猎犬','步行猎犬','藏獒','豺犬',
               '纯种古代牧羊犬','大丹犬','大瑞士山地犬','大型雪纳瑞犬','丹地丁蒙梗','德国短毛向导猎犬',
               '德国牧羊犬','斗牛獒犬','斗牛拳师犬','杜宾犬','俄罗斯狼犬','恩特雷布赫山地犬','法国斗牛犬',
               '非洲豺犬','弗莱特寻回犬','佛兰德牧牛狗','刚毛猎狐梗','戈登塞特犬','哈巴狗','荷兰卷尾狮毛狗',
               '黑褐猎浣熊犬','蝴蝶犬','吉娃娃','金毛寻回犬','卷毛寻回犬','凯恩梗','凯利蓝梗','柯利牧羊犬',
               '可卡犬','可蒙犬','拉布拉多猎犬','拉克兰梗','拉萨犬','莱昂贝格','罗得西亚脊背犬','罗威纳犬',
               '玛尔济斯犬','玛伦牧羊犬','美国斯塔福梗','迷你贵宾犬','迷你型雪纳瑞犬','墨西哥无毛狗','纽芬兰犬',
               '挪威猎麋犬','诺福克梗','诺里奇梗','彭布洛克威尔斯柯基犬','切萨皮克海湾寻回犬','日本狆犬','瑞德朋猎浣熊犬',
               '萨路基犬','萨摩耶犬','圣伯纳犬','史奇派克犬','斯坦福斗牛梗','松狮犬','苏格兰梗','苏格兰猎鹿犬',
               '苏塞克斯猎犬','玩具贵宾犬','玩具猎鹬犬','威尔士柯基犬','威尔士跳猎犬','威玛猎犬','维希拉猎犬',
               '西班牙猎犬','西伯利亚雪橇犬','西藏梗犬','西高地白梗','西里汉梗','西施犬','喜乐蒂牧羊犬','小灵狗',
               '小鹿犬','匈牙利白狗','雪梨犬','雪纳瑞犬','寻血猎犬','依比沙猎犬','意大利灰狗','英国蹲猎犬',
               '英国猎狐犬','英国史宾格犬','约克夏梗']

#修改名字
FilePath='train_data/'
type_counter = 0
for type in DogType:
    file_counter = 0
    subfolder = os.listdir(FilePath+type)
    for subclass in subfolder:
        file_counter +=1
        print (file_counter)
        print ('Type_counter',type_counter)
        print (subclass)
        os.rename(FilePath+type+'/'+subclass, FilePath+type+'/'+str(type_counter)+'_'+str(file_counter)+'_'+subclass.split('.')[0]+'.jpg')
    type_counter += 1

#修改尺寸
Output_folder='train_img/'
for type in DogType:
    for i in os.listdir(FilePath + type):
        img_open = Image.open(FilePath + type + '/' + i)
        conv_RGB = img_open.convert('RGB')
        Resized_img = conv_RGB.resize((100, 100), Image.BILINEAR)
        Resized_img.save(os.path.join(Output_folder, os.path.basename(i)))

 



4.将图像转换为数组

train_folder='train_img/'
train_img_list = []
train_label_list = []
for file in os.listdir(train_folder):
            img = Image.open(train_folder + file)
            files_img_in_array =  np.array(img)#将图像转化为数组
            train_img_list.append(files_img_in_array) #图像列表相加
            train_label_list.append(int(file.split('_')[0])) #标签列表汇总

train_img_list = np.array(train_img_list)
train_label_list = np.array(train_label_list)

train_label_list = np_utils.to_categorical(train_label_list,120) #格式为二进制 [0,0,0,0,1,0,0]

train_img_list = train_img_list.astype('float32')#将图像数组转化为浮点类型
train_img_list /= 255#归一化

5.构建神经网络

#-- 创建CNN神经网络model = Sequential() #CNN 1层model.add(Convolution2D(             filters=32, #Output  (100,100,32)             kernel_size= (5,5) , #卷积核             padding= 'same', #边距处理方法 padding method             input_shape=(100,100,3) , #input shape         )) model.add(Activation('relu')) model.add(MaxPooling2D(             pool_size=(2,2), #Output  (50,50,32)             strides=(2,2),             padding='same',         )) #CNN 2层model.add(Convolution2D(             filters=64,  #Output (50,50,64)             kernel_size=(2,2),             padding='same',         )) model.add(Activation('relu')) model.add(MaxPooling2D(  #Output(25,25,64)             pool_size=(2,2),             strides=(2,2),             padding='same',         )) #全连层 Layer -1 model.add(Flatten()) model.add(Dense(1024)) model.add(Activation('relu')) # 全连层 Layer -2 model.add(Dense(512)) model.add(Activation('relu')) #全连层 Layer -3 model.add(Dense(256)) model.add(Activation('relu')) #全连层 Layer -4 model.add(Dense(120))#添加120个节点的连接层model.add(Activation('softmax'))#添加激活层,softmax将输入的一个向量转换为概率分布# 定义优化器adam = Adam(lr = 0.0001) #编译模型model.compile(optimizer=adam,                       loss="categorical_crossentropy",                       metrics=['accuracy']                       )


model.summary()




6.训练并保存模型




# 训练
model.fit(
            train_img_list,
            train_label_list,
            epochs=30,
            batch_size=64,
            verbose=1,
        )
#保存模型
model.save('./2103840129.h5')

 

7.进行预测


PredictFile='./预测文件夹/预测.jpg'
# 图象处理
model = load_model('2103840129.h5')
img_open = Image.open(PredictFile)
conv_RGB = img_open.convert('RGB')
new_img = conv_RGB.resize((100, 100), Image.BILINEAR)
new_img.save(PredictFile)
# 图片重塑
image = processimage.imread(PredictFile)
image_to_array = np.array(image) / 255.0
image_to_array = image_to_array.reshape(-1, 100, 100, 3)
prediction = model.predict(image_to_array)
#比较结果
count = 0
probability = 0
prDtype = ''
for i in prediction[0]:
    # print (i)
    # percentage = '%.2f%%' % (i * 100)
    # print (self.DogType[count],'概率:' ,percentage)
    if (probability<i):
        probability=i
        prDtype=DogType[count]
        count += 1
    else:
        count +=1
showP = Image.open('./预测文件夹/预测.jpg')
plt.imshow(showP)
plt.show()
print('该狗狗最有可能为:',prDtype,'概率:','%.2f%%' % (probability * 100))



全部代码:
分类图像py:
import os
from PIL import Image

DogType = ['阿芬平嘉犬','阿富汗猎犬','阿拉斯加雪橇犬','阿彭则牧牛犬','艾尔谷犬','爱尔兰梗','爱尔兰猎狼犬',
               '爱尔兰软毛梗犬','爱尔兰水猎犬','爱尔兰雪达犬','爱斯基摩犬','奥达猎犬','澳大利亚卡尔比犬',
               '澳洲梗','澳洲野犬','巴吉度猎犬','巴仙吉犬','北京狮子狗','贝林顿梗','比格犬','比利时犬',
               '庇里牛斯大狗','边境牧羊犬','标准贵宾犬','波士顿斗牛犬','伯德梗','伯恩山犬','博美犬','布里犬',
               '布列塔尼猎犬','布鲁塞尔格林芬犬','布鲁泰克浣熊犬','布伦海姆猎犬','步行猎犬','藏獒','豺犬',
               '纯种古代牧羊犬','大丹犬','大瑞士山地犬','大型雪纳瑞犬','丹地丁蒙梗','德国短毛向导猎犬',
               '德国牧羊犬','斗牛獒犬','斗牛拳师犬','杜宾犬','俄罗斯狼犬','恩特雷布赫山地犬','法国斗牛犬',
               '非洲豺犬','弗莱特寻回犬','佛兰德牧牛狗','刚毛猎狐梗','戈登塞特犬','哈巴狗','荷兰卷尾狮毛狗',
               '黑褐猎浣熊犬','蝴蝶犬','吉娃娃','金毛寻回犬','卷毛寻回犬','凯恩梗','凯利蓝梗','柯利牧羊犬',
               '可卡犬','可蒙犬','拉布拉多猎犬','拉克兰梗','拉萨犬','莱昂贝格','罗得西亚脊背犬','罗威纳犬',
               '玛尔济斯犬','玛伦牧羊犬','美国斯塔福梗','迷你贵宾犬','迷你型雪纳瑞犬','墨西哥无毛狗','纽芬兰犬',
               '挪威猎麋犬','诺福克梗','诺里奇梗','彭布洛克威尔斯柯基犬','切萨皮克海湾寻回犬','日本狆犬','瑞德朋猎浣熊犬',
               '萨路基犬','萨摩耶犬','圣伯纳犬','史奇派克犬','斯坦福斗牛梗','松狮犬','苏格兰梗','苏格兰猎鹿犬',
               '苏塞克斯猎犬','玩具贵宾犬','玩具猎鹬犬','威尔士柯基犬','威尔士跳猎犬','威玛猎犬','维希拉猎犬',
               '西班牙猎犬','西伯利亚雪橇犬','西藏梗犬','西高地白梗','西里汉梗','西施犬','喜乐蒂牧羊犬','小灵狗',
               '小鹿犬','匈牙利白狗','雪梨犬','雪纳瑞犬','寻血猎犬','依比沙猎犬','意大利灰狗','英国蹲猎犬',
               '英国猎狐犬','英国史宾格犬','约克夏梗']
#修改名字
FilePath='train_data/'
type_counter = 0
for type in DogType:
    file_counter = 0
    subfolder = os.listdir(FilePath+type)
    for subclass in subfolder:
        file_counter +=1
        print (file_counter)
        print ('Type_counter',type_counter)
        print (subclass)
        os.rename(FilePath+type+'/'+subclass, FilePath+type+'/'+str(type_counter)+'_'+str(file_counter)+'_'+subclass.split('.')[0]+'.jpg')
    type_counter += 1
#修改尺寸
Output_folder='train_img/'
for type in DogType:
    for i in os.listdir(FilePath + type):
        img_open = Image.open(FilePath + type + '/' + i)
        conv_RGB = img_open.convert('RGB')
        Resized_img = conv_RGB.resize((100, 100), Image.BILINEAR)
        Resized_img.save(os.path.join(Output_folder, os.path.basename(i)))
构建、训练、保存模型py:
import os
import numpy as np
from PIL import Image
from keras.models import Sequential
from keras.layers import Convolution2D, Flatten, Dropout, MaxPooling2D,Dense,Activation
from keras.optimizers import Adam
from keras.utils import np_utils

train_folder='train_img/'
train_img_list = []
train_label_list = []
for file in os.listdir(train_folder):
            img = Image.open(train_folder + file)
            files_img_in_array =  np.array(img)#将图像转化为数组
            train_img_list.append(files_img_in_array) #图像列表相加
            train_label_list.append(int(file.split('_')[0])) #标签列表汇总

train_img_list = np.array(train_img_list)
train_label_list = np.array(train_label_list)

train_label_list = np_utils.to_categorical(train_label_list,120) #格式为二进制 [0,0,0,0,1,0,0]

train_img_list = train_img_list.astype('float32')#将图像数组转化为浮点类型
train_img_list /= 255#归一化

#-- 创建CNN神经网络
model = Sequential()
#CNN 1层
model.add(Convolution2D(
            filters=32, #Output  (100,100,32)
            kernel_size= (5,5) , #卷积核
            padding= 'same', #边距处理方法 padding method
            input_shape=(100,100,3) , #input shape
        ))
model.add(Activation('relu'))
model.add(MaxPooling2D(
            pool_size=(2,2), #Output  (50,50,32)
            strides=(2,2),
            padding='same',
        ))

#CNN 2层
model.add(Convolution2D(
            filters=64,  #Output (50,50,64)
            kernel_size=(2,2),
            padding='same',
        ))
model.add(Activation('relu'))
model.add(MaxPooling2D(  #Output(25,25,64)
            pool_size=(2,2),
            strides=(2,2),
            padding='same',
        ))

#全连层 Layer -1
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
# 全连层 Layer -2
model.add(Dense(512))
model.add(Activation('relu'))
#全连层 Layer -3
model.add(Dense(256))
model.add(Activation('relu'))
#全连层 Layer -4
model.add(Dense(120))#添加120个节点的连接层
model.add(Activation('softmax'))#添加激活层,softmax将输入的一个向量转换为概率分布
# 定义优化器
adam = Adam(lr = 0.0001)
#编译模型
model.compile(optimizer=adam,
                      loss="categorical_crossentropy",
                      metrics=['accuracy']
                      )
# 训练
model.fit(
            train_img_list,
            train_label_list,
            epochs=30,
            batch_size=64,
            verbose=1,
        )
#保存模型
model.save('./2103840129.h5')
预测结果:
from keras.models import load_model
import matplotlib.image as processimage
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

DogType = ['阿芬平嘉犬','阿富汗猎犬','阿拉斯加雪橇犬','阿彭则牧牛犬','艾尔谷犬','爱尔兰梗','爱尔兰猎狼犬',
               '爱尔兰软毛梗犬','爱尔兰水猎犬','爱尔兰雪达犬','爱斯基摩犬','奥达猎犬','澳大利亚卡尔比犬',
               '澳洲梗','澳洲野犬','巴吉度猎犬','巴仙吉犬','北京狮子狗','贝林顿梗','比格犬','比利时犬',
               '庇里牛斯大狗','边境牧羊犬','标准贵宾犬','波士顿斗牛犬','伯德梗','伯恩山犬','博美犬','布里犬',
               '布列塔尼猎犬','布鲁塞尔格林芬犬','布鲁泰克浣熊犬','布伦海姆猎犬','步行猎犬','藏獒','豺犬',
               '纯种古代牧羊犬','大丹犬','大瑞士山地犬','大型雪纳瑞犬','丹地丁蒙梗','德国短毛向导猎犬',
               '德国牧羊犬','斗牛獒犬','斗牛拳师犬','杜宾犬','俄罗斯狼犬','恩特雷布赫山地犬','法国斗牛犬',
               '非洲豺犬','弗莱特寻回犬','佛兰德牧牛狗','刚毛猎狐梗','戈登塞特犬','哈巴狗','荷兰卷尾狮毛狗',
               '黑褐猎浣熊犬','蝴蝶犬','吉娃娃','金毛寻回犬','卷毛寻回犬','凯恩梗','凯利蓝梗','柯利牧羊犬',
               '可卡犬','可蒙犬','拉布拉多猎犬','拉克兰梗','拉萨犬','莱昂贝格','罗得西亚脊背犬','罗威纳犬',
               '玛尔济斯犬','玛伦牧羊犬','美国斯塔福梗','迷你贵宾犬','迷你型雪纳瑞犬','墨西哥无毛狗','纽芬兰犬',
               '挪威猎麋犬','诺福克梗','诺里奇梗','彭布洛克威尔斯柯基犬','切萨皮克海湾寻回犬','日本狆犬','瑞德朋猎浣熊犬',
               '萨路基犬','萨摩耶犬','圣伯纳犬','史奇派克犬','斯坦福斗牛梗','松狮犬','苏格兰梗','苏格兰猎鹿犬',
               '苏塞克斯猎犬','玩具贵宾犬','玩具猎鹬犬','威尔士柯基犬','威尔士跳猎犬','威玛猎犬','维希拉猎犬',
               '西班牙猎犬','西伯利亚雪橇犬','西藏梗犬','西高地白梗','西里汉梗','西施犬','喜乐蒂牧羊犬','小灵狗',
               '小鹿犬','匈牙利白狗','雪梨犬','雪纳瑞犬','寻血猎犬','依比沙猎犬','意大利灰狗','英国蹲猎犬',
               '英国猎狐犬','英国史宾格犬','约克夏梗']
PredictFile='./预测文件夹/预测.jpg'
# 图象处理
model = load_model('2103840129.h5')
img_open = Image.open(PredictFile)
conv_RGB = img_open.convert('RGB')
new_img = conv_RGB.resize((100, 100), Image.BILINEAR)
new_img.save(PredictFile)
# 图片重塑
image = processimage.imread(PredictFile)
image_to_array = np.array(image) / 255.0
image_to_array = image_to_array.reshape(-1, 100, 100, 3)
prediction = model.predict(image_to_array)
#比较结果
count = 0
probability = 0
prDtype = ''
for i in prediction[0]:
    # print (i)
    # percentage = '%.2f%%' % (i * 100)
    # print (self.DogType[count],'概率:' ,percentage)
    if (probability<i):
        probability=i
        prDtype=DogType[count]
        count += 1
    else:
        count +=1
showP = Image.open('./预测文件夹/预测.jpg')
plt.imshow(showP)
plt.show()
print('该狗狗最有可能为:',prDtype,'概率:','%.2f%%' % (probability * 100))

四、总结


狗的品种虽然有120种,但是因为人为繁育的原因,很多品种非常的类似,比如爱斯基摩犬、阿拉斯加雪橇犬、西伯利亚雪橇犬这三种犬种就非常的类似,在这种情况下机器容易出现预测错误,因为120种结果输出颇多,所以该案例中我选择输出acc值最高的那一种。


通过该案例让我对keras框架和神经网络模型有了更近一步的认识,同时在学习2万的数据集时,我觉得通过cpu训练的速度颇慢,迫于时间问题,在一次安装CUDA驱动和TensorFlow-GPU包失败后造成python源错误,最后通过卸载和重装才解决。

    在接下来的日子里我会继续钻研机器学习视觉的技术,并且安装驱动和框架使用GPU进行训练加大训练的速度。 

 

DogType = ['阿芬平嘉犬','阿富汗猎犬','阿拉斯加雪橇犬','阿彭则牧牛犬','艾尔谷犬','爱尔兰梗','爱尔兰猎狼犬',
               '爱尔兰软毛梗犬','爱尔兰水猎犬','爱尔兰雪达犬','爱斯基摩犬','奥达猎犬','澳大利亚卡尔比犬',
               '澳洲梗','澳洲野犬','巴吉度猎犬','巴仙吉犬','北京狮子狗','贝林顿梗','比格犬','比利时犬',
               '庇里牛斯大狗','边境牧羊犬','标准贵宾犬','波士顿斗牛犬','伯德梗','伯恩山犬','博美犬','布里犬',
               '布列塔尼猎犬','布鲁塞尔格林芬犬','布鲁泰克浣熊犬','布伦海姆猎犬','步行猎犬','藏獒','豺犬',
               '纯种古代牧羊犬','大丹犬','大瑞士山地犬','大型雪纳瑞犬','丹地丁蒙梗','德国短毛向导猎犬',
               '德国牧羊犬','斗牛獒犬','斗牛拳师犬','杜宾犬','俄罗斯狼犬','恩特雷布赫山地犬','法国斗牛犬',
               '非洲豺犬','弗莱特寻回犬','佛兰德牧牛狗','刚毛猎狐梗','戈登塞特犬','哈巴狗','荷兰卷尾狮毛狗',
               '黑褐猎浣熊犬','蝴蝶犬','吉娃娃','金毛寻回犬','卷毛寻回犬','凯恩梗','凯利蓝梗','柯利牧羊犬',
               '可卡犬','可蒙犬','拉布拉多猎犬','拉克兰梗','拉萨犬','莱昂贝格','罗得西亚脊背犬','罗威纳犬',
               '玛尔济斯犬','玛伦牧羊犬','美国斯塔福梗','迷你贵宾犬','迷你型雪纳瑞犬','墨西哥无毛狗','纽芬兰犬',
               '挪威猎麋犬','诺福克梗','诺里奇梗','彭布洛克威尔斯柯基犬','切萨皮克海湾寻回犬','日本狆犬','瑞德朋猎浣熊犬',
               '萨路基犬','萨摩耶犬','圣伯纳犬','史奇派克犬','斯坦福斗牛梗','松狮犬','苏格兰梗','苏格兰猎鹿犬',
               '苏塞克斯猎犬','玩具贵宾犬','玩具猎鹬犬','威尔士柯基犬','威尔士跳猎犬','威玛猎犬','维希拉猎犬',
               '西班牙猎犬','西伯利亚雪橇犬','西藏梗犬','西高地白梗','西里汉梗','西施犬','喜乐蒂牧羊犬','小灵狗',
               '小鹿犬','匈牙利白狗','雪梨犬','雪纳瑞犬','寻血猎犬','依比沙猎犬','意大利灰狗','英国蹲猎犬',
               '英国猎狐犬','英国史宾格犬','约克夏梗']
#修改名字
FilePath='train_data/'
type_counter = 0
for type in DogType:
    file_counter = 0
    subfolder = os.listdir(FilePath+type)
    for subclass in subfolder:
        file_counter +=1
        print (file_counter)
        print ('Type_counter',type_counter)
        print (subclass)
        os.rename(FilePath+type+'/'+subclass, FilePath+type+'/'+str(type_counter)+'_'+str(file_counter)+'_'+subclass.split('.')[0]+'.jpg')
    type_counter += 1
#修改尺寸
Output_folder='train_img/'
for type in DogType:
    for i in os.listdir(FilePath + type):
        img_open = Image.open(FilePath + type + '/' + i)
        conv_RGB = img_open.convert('RGB')
        Resized_img = conv_RGB.resize((100, 100), Image.BILINEAR)
        Resized_img.save(os.path.join(Output_folder, os.path.basename(i)))

标签:课程设计,猎犬,img,python,list,train,model,识别,type
From: https://www.cnblogs.com/wwwwpoor/p/16999884.html

相关文章

  • Using Python to Check If List of Words in String
    TocheckifalistofwordsisinastringusingPython,theeasiestwayiswithlistcomprehension.>>>list_of_words=["this","words","string"]>>>string=......
  • 机器学习——识别是否可回收物品
    (一)选题背景现在大家丢垃圾都是乱丢垃圾,可回收不可回收有害垃圾都堆叠在一起,做识别可回收垃圾就是为了工厂方便识别可再利用的垃圾。可回收垃圾(Recyclablegarbage)是一种......
  • Python学习笔记--数据可视化的开头
    JSON数据格式的转换示例:若是有中文数据,可以在data后面加上ensure_ascii=Falsepyecharts模块网站:https://gallery.pyecharts.org(有参考代码可以看简称,画廊)记得......
  • Python学习笔记--异常+模块+包
    异常的捕获基本语法:示例:捕获指定异常基本语法:--必写示例:捕获多个异常示例:捕获所有异常示例:异常else--可写可不写示例:异常finally(无论是否出现异常......
  • Python requests库指定IP请求,并使用HTTPS证书验证
    背景运维同学通过网关平台下发nginx配置文件,下发的过程是先灰度发布,发灰度机器,然后需要验证域名的请求是否正常,然后在下发其他生产机器,但是验证过程是人为操作,这就不可避......
  • python中单下划线与双下划线命名变量的作用与区别
    在python中有一些与下划线相关的约定,这是一个有趣的主题,值得分析分析。对于变量前面有一个下划线,大家都知道这意味着这个变量是类内私有变量,但是奇怪的是这样的类内变量是......
  • 【Python爬虫课程设计】BiliBili UP主数据——绘制数据柱状图和词云
    一、选题的背景1.背景:哔哩哔哩(www.bilibili.com,英文名称:bilibili,简称B站)现为中国年轻世代高度聚集的文化社区和视频平台,该网站于2009年6月26日创建。B站早期是一个ACG(动......
  • 基于深度学习的命名实体识别与关系抽取
    基于深度学习的命名实体识别与关系抽取作者:王嘉宁 ​摘要:构建知识图谱包含四个主要的步骤:数据获取、知识抽取、知识融合和知识加工。其中最主要的步骤是知识抽取。知识抽取......
  • Python安装
    1、安装包:https://pan.baidu.com/s/1Y5J_9-RNCpIJK9GfeoJhNA2、下载完成后双击执行下载的exe程序,进入安装界面。安装界面可以选择默认安装,也可以自定义安装,我比较喜欢自定义......
  • Python|文件处理与数据库编程
    某农带专业Python课实验三txt文件处理题目描述:编程新建一个名为test.txt文件,存放在代码文件所在目录中,并且打开该文件。然后写入如图1-1所示内容到文件中。最后分别读......