最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何利用Tensorflow2進(jìn)行貓狗分類識別

 更新時間:2022年06月27日 10:42:00   作者:choosetobehappy  
圖像分類是根據(jù)圖像的語義信息將不同類別圖像區(qū)分開來,是計算機視覺中重要的基本問題,下面這篇文章主要給大家介紹了關(guān)于如何利用Tensorflow2進(jìn)行貓狗分類識別的相關(guān)資料,需要的朋友可以參考下

前言

本文參照了大佬Andrew Ng的所講解的Tensorflow 2視頻所寫,本文將其中只適用于Linux的功能以及只適用于Google Colab的功能改為了普適的代碼同時加入了自己的理解,尚處學(xué)習(xí)與探索階段,能力有限,希望大家多多指正。

文章所需代碼均在Jupyter Notebook當(dāng)中實現(xiàn)。

數(shù)據(jù)集獲取

使用tf.keras.utils.get_file()能夠從指定的URL當(dāng)中直接獲取數(shù)據(jù)集,我們在已知網(wǎng)站當(dāng)中獲取到貓狗分類所需圖片,為壓縮包格式,將其命名為cats_and_dogs_filtered.zip,為該操作設(shè)置一個變量path,該變量指向的便是該數(shù)據(jù)集下載之后存儲的路徑。

import tensorflow as tf
path=tf.keras.utils.get_file('cats_and_dogs_filtered.zip',origin='https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip')
print(path)#會輸出其路徑,和當(dāng)前notebook文件路徑相同

文件解壓

使用第三方庫zipfile進(jìn)行文件的解壓,下列代碼將其解壓到了指定的文件夾當(dāng)中。

import zipfile

local_zip = path
zip_ref = zipfile.ZipFile(local_zip, 'r')

zip_ref.extractall('C:\\Users\\lenovo\\.keras\\datasets')
zip_ref.close()

文件夾當(dāng)中又有兩個文件夾,分別用于訓(xùn)練以及驗證神經(jīng)網(wǎng)絡(luò)模型,每個文件夾當(dāng)中又包含著兩個文件,代表著不同類別的貓與狗的圖片所處位置路徑。

我們在一個神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建當(dāng)中,需要訓(xùn)練集(train data)與驗證集(validation data)。通俗而言,這里的訓(xùn)練集就是告訴模型貓與狗的外表。而驗證集可以檢查模型的好壞,評估模型的效果。

將文件分為訓(xùn)練集與驗證集

使用os庫找到貓狗數(shù)據(jù)的文件夾的路徑,將其根據(jù)文件夾劃分為數(shù)據(jù)集。

import os
base_dir = 'C:/Users/lenovo/.keras/datasets/cats_and_dogs_filtered'

train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')

train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')

validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')

下面來看一看train文件夾當(dāng)中的cats文件夾和dogs文件夾當(dāng)中的文件數(shù)據(jù)。

train_cat_fnames = os.listdir( train_cats_dir )
train_dog_fnames = os.listdir( train_dogs_dir )

print(train_cat_fnames[:10])
print(train_dog_fnames[:10])
['cat.0.jpg', 'cat.1.jpg', 'cat.10.jpg', 'cat.100.jpg', 'cat.101.jpg', 'cat.102.jpg', 'cat.103.jpg', 'cat.104.jpg', 'cat.105.jpg', 'cat.106.jpg']
['dog.0.jpg', 'dog.1.jpg', 'dog.10.jpg', 'dog.100.jpg', 'dog.101.jpg', 'dog.102.jpg', 'dog.103.jpg', 'dog.104.jpg', 'dog.105.jpg', 'dog.106.jpg']

同時查看文件當(dāng)中包含圖片數(shù)據(jù)數(shù)量的大小。

print('total training cat images :', len(os.listdir(train_cats_dir)))
print('total training dog images :', len(os.listdir(train_dogs_dir)))

print('total validation cat images :', len(os.listdir(validation_cats_dir)))
print('total validation dog images :', len(os.listdir(validation_dogs_dir)))
total training cat images : 1000
total training dog images : 1000
total validation cat images : 500
total validation dog images : 500

我們了解到對于貓和狗的數(shù)據(jù)集,我們都有1000張圖片用于訓(xùn)練模型,500張圖片用于驗證模型效果。

繪圖查看

下面對貓狗分類數(shù)據(jù)集圖片進(jìn)行輸出,直觀地觀察不同圖片的異同。

#設(shè)置畫布大小以及子圖個數(shù)
%matplotlib inline

import matplotlib.image as mpimg
import matplotlib.pyplot as plt

nrows = 4
ncols = 4

pic_index = 0

繪制八只貓與八只狗圖片,觀看數(shù)據(jù)集中圖片有哪些特征。

fig = plt.gcf()
fig.set_size_inches(ncols*4, nrows*4)

pic_index+=8

next_cat_pix = [os.path.join(train_cats_dir, fname) 
                for fname in train_cat_fnames[ pic_index-8:pic_index] 
               ]

next_dog_pix = [os.path.join(train_dogs_dir, fname) 
                for fname in train_dog_fnames[ pic_index-8:pic_index]
               ]

for i, img_path in enumerate(next_cat_pix+next_dog_pix):
  sp = plt.subplot(nrows, ncols, i + 1)
  sp.axis('Off')
  img = mpimg.imread(img_path)
  plt.imshow(img)

plt.show()

通過觀察輸出圖片我們發(fā)現(xiàn)圖片形狀比例各不相同。與簡單的手寫數(shù)字集識別不同的是,手寫數(shù)字集都是統(tǒng)一的28*28大小的灰度圖片,而貓狗數(shù)據(jù)集是長寬各不同的彩色圖片。

模型建立

神經(jīng)網(wǎng)絡(luò)模型

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2), 
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'), 
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(), 
    tf.keras.layers.Dense(512, activation='relu'), 
    tf.keras.layers.Dense(1, activation='sigmoid')  
])

我們考慮將圖片全部轉(zhuǎn)化為150*150形狀的圖片,然后添加一系列的卷積層以及池化層,最后展平再進(jìn)入DNN.

model.summary()#觀察神經(jīng)網(wǎng)絡(luò)的參數(shù)

輸出結(jié)果:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 148, 148, 16)      448       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 74, 74, 16)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 72, 72, 32)        4640      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 36, 36, 32)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 34, 34, 64)        18496     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 17, 17, 64)        0         
_________________________________________________________________
flatten (Flatten)            (None, 18496)             0         
_________________________________________________________________
dense (Dense)                (None, 512)               9470464   
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 513       
=================================================================
Total params: 9,494,561
Trainable params: 9,494,561
Non-trainable params: 0
_________________________________________________________________

Outshape顯示了圖片在神經(jīng)網(wǎng)絡(luò)中的尺寸變化情況,可以看到在連續(xù)的神經(jīng)網(wǎng)絡(luò)層當(dāng)中,卷積層將圖片尺寸不斷縮小,而池化層一直讓圖片的尺寸減半。

模型編譯

接下來我們將進(jìn)行模型的編譯。 我們將使用二值交叉熵binary_crossentropy損失訓(xùn)練我們的模型,因為這是一個二元分類問題,我們的最后一層的激活函數(shù)設(shè)置為sigmoid,我們將使用學(xué)習(xí)率為0.001的rmsprop優(yōu)化器。在訓(xùn)練期間,我們將要監(jiān)控分類的準(zhǔn)確性。

在這種情況下,使用 RMSprop 優(yōu)化算法比隨機梯度下降 (SGD) 更可取,因為 RMSprop 為我們自動調(diào)整學(xué)習(xí)率。 (其他優(yōu)化器例如AdamAdagrad,也會在訓(xùn)練期間自動調(diào)整學(xué)習(xí)率,在這里也同樣適用。)

from tensorflow.keras.optimizers import RMSprop

model.compile(optimizer=RMSprop(lr=0.001),
              loss='binary_crossentropy',
              metrics = ['acc'])

數(shù)據(jù)預(yù)處理

讓我們設(shè)置數(shù)據(jù)生成器,它將讀取我們源文件夾中的圖片,將它們轉(zhuǎn)換為張量,并將它們以及它們的標(biāo)簽提供給神經(jīng)網(wǎng)絡(luò)。我們將得到一個用于訓(xùn)練圖像的生成器和一個用于驗證圖像的生成器。我們的生成器將批量生成 20 張大小為 150*150 的圖像及其標(biāo)簽。

進(jìn)入神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)通常應(yīng)該以某種方式標(biāo)準(zhǔn)化,以使其更易于被神經(jīng)網(wǎng)絡(luò)處理。在我們的例子中,我們將通過將像素值歸一化為 [0,1] 范圍內(nèi)(最初所有值都在 [0,255] 范圍內(nèi))來預(yù)處理我們的圖像。

在 Keras 中,這可以通過使用rescale參數(shù)的keras.preprocessing.image.ImageDataGenerator類來完成。ImageDataGenerator 通過.flow(data, labels).flow_from_directory(directory)得到數(shù)據(jù)。然后,這些生成器可以與接受數(shù)據(jù)生成器作為輸入的 Keras 模型方法一起使用:fit_generator、evaluate_generatorpredict_generator

from tensorflow.keras.preprocessing.image import ImageDataGenerator

#標(biāo)準(zhǔn)化到[0,1]
train_datagen = ImageDataGenerator( rescale = 1.0/255. )
test_datagen  = ImageDataGenerator( rescale = 1.0/255. )

#批量生成20個大小為大小為 150x150 的圖像及其標(biāo)簽用于訓(xùn)練
train_generator = train_datagen.flow_from_directory(train_dir,
                                                    batch_size=20,
                                                    class_mode='binary',
                                                    target_size=(150, 150))     
#批量生成20個大小為大小為 150x150 的圖像及其標(biāo)簽用于驗證
validation_generator =  test_datagen.flow_from_directory(validation_dir,
                                                         batch_size=20,
                                                         class_mode  = 'binary',
                                                         target_size = (150, 150))
Found 2000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.

模型訓(xùn)練

我們讓所有2000張可用圖像訓(xùn)練15次,并在所有1000張測試圖像上進(jìn)行驗證。

我們持續(xù)觀察每次訓(xùn)練的值。在每個時期看到4個值——損失、準(zhǔn)確度、驗證損失和驗證準(zhǔn)確度。

Loss 和 Accuracy 是訓(xùn)練進(jìn)度的一個很好的指標(biāo)。 它對訓(xùn)練數(shù)據(jù)的分類進(jìn)行猜測,然后根據(jù)訓(xùn)練好的模型對其進(jìn)行計算結(jié)果。 準(zhǔn)確度是正確猜測的部分。 驗證準(zhǔn)確度是對未在訓(xùn)練中使用的數(shù)據(jù)進(jìn)行的計算。

history = model.fit_generator(train_generator,
                              validation_data=validation_generator,
                              steps_per_epoch=100,
                              epochs=15,
                              validation_steps=50,
                              verbose=2)

結(jié)果:

Epoch 1/15
100/100 - 26s - loss: 0.8107 - acc: 0.5465 - val_loss: 0.7072 - val_acc: 0.5040
Epoch 2/15
100/100 - 30s - loss: 0.6420 - acc: 0.6555 - val_loss: 0.6493 - val_acc: 0.5780
Epoch 3/15
100/100 - 31s - loss: 0.5361 - acc: 0.7350 - val_loss: 0.6060 - val_acc: 0.7020
Epoch 4/15
100/100 - 29s - loss: 0.4432 - acc: 0.7865 - val_loss: 0.6289 - val_acc: 0.6870
Epoch 5/15
100/100 - 29s - loss: 0.3451 - acc: 0.8560 - val_loss: 0.8342 - val_acc: 0.6740
Epoch 6/15
100/100 - 29s - loss: 0.2777 - acc: 0.8825 - val_loss: 0.6812 - val_acc: 0.7130
Epoch 7/15
100/100 - 30s - loss: 0.1748 - acc: 0.9285 - val_loss: 0.9056 - val_acc: 0.7110
Epoch 8/15
100/100 - 30s - loss: 0.1373 - acc: 0.9490 - val_loss: 0.8875 - val_acc: 0.7000
Epoch 9/15
100/100 - 29s - loss: 0.0794 - acc: 0.9715 - val_loss: 1.0687 - val_acc: 0.7190
Epoch 10/15
100/100 - 30s - loss: 0.0747 - acc: 0.9765 - val_loss: 1.1952 - val_acc: 0.7420
Epoch 11/15
100/100 - 30s - loss: 0.0430 - acc: 0.9890 - val_loss: 5.6920 - val_acc: 0.5680
Epoch 12/15
100/100 - 31s - loss: 0.0737 - acc: 0.9825 - val_loss: 1.5368 - val_acc: 0.7110
Epoch 13/15
100/100 - 30s - loss: 0.0418 - acc: 0.9880 - val_loss: 1.4780 - val_acc: 0.7250
Epoch 14/15
100/100 - 30s - loss: 0.0990 - acc: 0.9885 - val_loss: 1.7837 - val_acc: 0.7130
Epoch 15/15
100/100 - 31s - loss: 0.0340 - acc: 0.9910 - val_loss: 1.6921 - val_acc: 0.7200

運行模型

接下來使用模型進(jìn)行實際運行預(yù)測。下面的代碼將判斷指定陌生圖片是狗還是貓。

選擇圖片文件進(jìn)行預(yù)測:

import tkinter as tk
from tkinter import filedialog
'''打開選擇文件夾對話框'''
root = tk.Tk()
root.withdraw()

Filepath = filedialog.askopenfilename() #獲得選擇好的文件
import numpy as np
from keras.preprocessing import image

path=Filepath
img=image.load_img(path,target_size=(150, 150))
  
x=image.img_to_array(img)
x=np.expand_dims(x, axis=0)
images = np.vstack([x])
  
classes = model.predict(images, batch_size=10)
print(classes[0])
  
if classes[0]>0:
    print("This is a dog")   
else:
    print("This is a cat")

這樣會彈出一個文件選擇框,選擇文件就可以得到預(yù)測的結(jié)果。

可視化中間表示

為了解在神經(jīng)網(wǎng)絡(luò)模型當(dāng)中學(xué)習(xí)了什么樣的特征,可以通過可視化輸入在通過神將網(wǎng)絡(luò)時如何轉(zhuǎn)換。

我們從訓(xùn)練集中隨機選擇一張貓或狗的圖像,然后生成一個圖形,其中每一行是一個層的輸出,而行中的每個圖像都是該輸出特征圖中的特定過濾器。

import numpy as np
import random
from   tensorflow.keras.preprocessing.image import img_to_array, load_img

#輸入層
successive_outputs = [layer.output for layer in model.layers[1:]]
#可視化模型
visualization_model = tf.keras.models.Model(inputs = model.input, outputs = successive_outputs)
#隨機選擇一張貓或狗的圖片
cat_img_files = [os.path.join(train_cats_dir, f) for f in train_cat_fnames]
dog_img_files = [os.path.join(train_dogs_dir, f) for f in train_dog_fnames]

img_path = random.choice(cat_img_files + dog_img_files)
img = load_img(img_path, target_size=(150, 150)) 
x   = img_to_array(img)                           #轉(zhuǎn)換為150*150*3的數(shù)組
x   = x.reshape((1,) + x.shape)                   #轉(zhuǎn)換為1*150*150*3的數(shù)組

#標(biāo)準(zhǔn)化
x /= 255.0

successive_feature_maps = visualization_model.predict(x)

layer_names = [layer.name for layer in model.layers]

for layer_name, feature_map in zip(layer_names, successive_feature_maps):
  
  if len(feature_map.shape) == 4:
    n_features = feature_map.shape[-1]
    size       = feature_map.shape[ 1]
    
    display_grid = np.zeros((size, size * n_features))
    
    for i in range(n_features):
      x  = feature_map[0, :, :, i]
      x -= x.mean()
      x /= x.std ()
      x *=  64
      x += 128
      x  = np.clip(x, 0, 255).astype('uint8')
      display_grid[:, i * size : (i + 1) * size] = x

    scale = 20. / n_features
    plt.figure( figsize=(scale * n_features, scale) )
    plt.title ( layer_name )
    plt.grid  ( False )
    plt.imshow( display_grid, aspect='auto', cmap='viridis' ) 

如上圖片所示,我們得到從圖像的原始像素到越來越抽象和緊湊的表示。下面的圖像表示開始突出神經(jīng)網(wǎng)絡(luò)關(guān)注的內(nèi)容,并且它們顯示越來越少的特征被“激活”。

這些表示攜帶越來越少的關(guān)于圖像原始像素的信息,但越來越精細(xì)的關(guān)于圖像類別的信息??梢詫⑸駥⒕W(wǎng)絡(luò)模型視為圖片信息的蒸餾管道,這樣通過一層層的遞進(jìn)就得到了圖像的較顯著的特征。

評估模型精度與損失值

輸出訓(xùn)練過程中隨訓(xùn)練次數(shù)變化的精度與損失值的變化圖

acc      = history.history[     'acc' ]
val_acc  = history.history[ 'val_acc' ]
loss     = history.history[    'loss' ]
val_loss = history.history['val_loss' ]

epochs   = range(len(acc))

plt.plot  ( epochs,     acc ,label='acc')
plt.plot  ( epochs, val_acc ,label='val_acc')
plt.legend(loc='best')
plt.title ('Training and validation accuracy')
plt.figure()
plt.plot  ( epochs,     loss ,label='loss')
plt.plot  ( epochs, val_loss ,label='val_loss')
plt.legend(loc='best')
plt.title ('Training and validation loss')

通過觀察圖線發(fā)現(xiàn)出現(xiàn)了過擬合的現(xiàn)象,我們的訓(xùn)練準(zhǔn)確度接近 100%,而我們的驗證準(zhǔn)確度停滯在大概70%。我們的驗證損失值僅在五個epoch后就達(dá)到了最小值。

accuracy變化

loss值變化

由于我們的訓(xùn)練樣本數(shù)量相對較少,防止過度擬合應(yīng)該是我們首要關(guān)注的問題。當(dāng)訓(xùn)練數(shù)據(jù)過少,模型學(xué)習(xí)無法推廣到新數(shù)據(jù)時,即當(dāng)模型開始使用不相關(guān)的特征進(jìn)行預(yù)測時,就會發(fā)生過度擬合。

總結(jié)

到此這篇關(guān)于如何利用Tensorflow2進(jìn)行貓狗分類識別的文章就介紹到這了,更多相關(guān)Tensorflow2貓狗分類識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用python對圖片進(jìn)行批量壓縮詳解

    如何使用python對圖片進(jìn)行批量壓縮詳解

    對于圖片強行被定義高和寬會變形,我們希望圖片被改變大小后,比例保持不變,完成對圖片的壓縮,下面這篇文章主要給大家介紹了關(guān)于如何使用python對圖片進(jìn)行批量壓縮的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • python內(nèi)置數(shù)據(jù)類型使用方法和繼承關(guān)系

    python內(nèi)置數(shù)據(jù)類型使用方法和繼承關(guān)系

    這篇文章主要介紹了python內(nèi)置數(shù)據(jù)類型使用方法和繼承關(guān)系,介紹內(nèi)容有python包含的內(nèi)置序列、使用內(nèi)置的數(shù)據(jù)類型等相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • selenium+python設(shè)置爬蟲代理IP的方法

    selenium+python設(shè)置爬蟲代理IP的方法

    這篇文章主要介紹了selenium+python設(shè)置爬蟲代理IP的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 利用python實現(xiàn)簡單的郵件發(fā)送客戶端示例

    利用python實現(xiàn)簡單的郵件發(fā)送客戶端示例

    下面小編就為大家分享一篇利用python實現(xiàn)簡單的郵件發(fā)送客戶端示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#中使用XPath定位HTML中的img標(biāo)簽的操作示例

    C#中使用XPath定位HTML中的img標(biāo)簽的操作示例

    隨著互聯(lián)網(wǎng)內(nèi)容的日益豐富,網(wǎng)頁數(shù)據(jù)的自動化處理變得愈發(fā)重要,圖片作為網(wǎng)頁中的重要組成部分,其獲取和處理在許多應(yīng)用場景中都顯得至關(guān)重要,本文將詳細(xì)介紹如何在 C# 應(yīng)用程序中使用 XPath 定位 HTML 中的 img 標(biāo)簽,并實現(xiàn)圖片的下載,需要的朋友可以參考下
    2024-07-07
  • 淺析Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些

    淺析Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些

    Python已經(jīng)廣泛的應(yīng)用于數(shù)據(jù)分析、數(shù)據(jù)挖掘、機器學(xué)習(xí)等眾多科學(xué)計算領(lǐng)域,這篇文章主要介紹了Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些?需要的朋友可以參考下
    2019-08-08
  • Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend)

    Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend)

    這篇文章主要介紹了Keras設(shè)定GPU使用內(nèi)存大小方式(Tensorflow backend),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python字符串模糊匹配工具TheFuzz的用法詳解

    Python字符串模糊匹配工具TheFuzz的用法詳解

    在處理文本數(shù)據(jù)時,常常需要進(jìn)行模糊字符串匹配來找到相似的字符串,Python的TheFuzz庫提供了強大的方法用于解決這類問題,本文將深入介紹TheFuzz庫,探討其基本概念、常用方法和示例代碼,需要的朋友可以參考下
    2023-12-12
  • 利用python3 的pygame模塊實現(xiàn)塔防游戲

    利用python3 的pygame模塊實現(xiàn)塔防游戲

    這篇文章主要介紹了利用python3 的pygame模塊實現(xiàn)塔防游戲,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python爬蟲實戰(zhàn)演練之采集拉鉤網(wǎng)招聘信息數(shù)據(jù)

    Python爬蟲實戰(zhàn)演練之采集拉鉤網(wǎng)招聘信息數(shù)據(jù)

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python采集拉鉤網(wǎng)招聘信息數(shù)據(jù),大家可以在過程中查缺補漏,提升水平
    2021-10-10

最新評論

璧山县| 桐城市| 全南县| 浑源县| 温泉县| 平南县| 郸城县| 石门县| 武汉市| 奇台县| 东丽区| 蒲城县| 衡阳县| 博罗县| 禹城市| 岱山县| 宝山区| 万州区| 陇西县| 罗城| 漠河县| 元江| 无为县| 青川县| 西盟| 汾西县| 哈巴河县| 望江县| 丹寨县| 黑山县| 江阴市| 吉木乃县| 静安区| 盖州市| 中超| 宣威市| 南通市| 合阳县| 阳春市| 恩平市| 通州市|