色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用TensorFlow2.0構建和部署端到端的圖像分類器

WpOh_rgznai100 ? 來源:lq ? 2019-05-31 17:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

2019 年 3 月 6 日,谷歌在 TensorFlow 開發者年度峰會上發布了最新版的 TensorFlow 框架 TensorFlow2.0 。新版本對 TensorFlow 的使用方式進行了重大改進,使其更加靈活和更具人性化。具體的改變和新增內容可以從 TensorFlow 的官網找到,本文將介紹如何使用 TensorFlow2.0 構建和部署端到端的圖像分類器,以及新版本中的新增內容,包括:

使用 TensorFlow Datasets 下載數據并進行預處理

使用 Keras 高級 API 構建和訓練圖像分類器

下載 InceptionV3 卷積神經網絡并對其進行微調

使用 TensorFlow Serving 為訓練好的模型發布服務接口

教程的所有源代碼都已發布到 GitHub 庫中,有需要的讀者可下載使用。

項目地址:

https://github.com/himanshurawlani/practical_intro_to_tf2

在此之前,需要提前安裝 TF nightly preview,其中包含 TensorFlow 2.0 alpha 版本,代碼如下:

$pipinstall-U--pretensorflow

1. 使用 TensorFlow Datasets 下載數據并進行預處理

TensorFlow Datasets 提供了一組可直接用于 TensorFlow 的數據集,它能夠下載和準備數據,并最終將數據集構建成 tf.data.Dataset 形式。

通過 pip 安裝 TensorFlow Datasets 的 python 庫,代碼如下:

$ pip install tfds-nightly

1.1 下載數據集

TensorFlow Datasets 中包含了許多數據集,按照需求添加自己的數據集。

具體的操作方法可見:

https://github.com/tensorflow/datasets/blob/master/docs/add_dataset.md

如果我們想列出可用的數據集,可以用下面的代碼:

import tensorflow_datasets as tfdsprint(tfds.list_builders())

在下載數據集之前,我們最好先了解下該數據集的詳細信息,例如該數據集的功能信息和統計信息等。本文將使用 tf_flowers 數據集,該數據集的詳細信息可以在 TensorFlow 官網找到,具體內容如下:

數據集的總可下載大小

通過 tfds.load() 返回的數據類型/對象

數據集是否已定義了標準分割形式:訓練、驗證和測試的大小

對于本文即將使用的 tf_flowers 數據集,其大小為 218MB,返回值為 FeaturesDict 對象,尚未進行分割。由于該數據集尚未定義標準分割形式,我們將利用 subsplit 函數將數據集分割為三部分,80% 用于訓練,10% 用于驗證,10% 用于測試;然后使用 tfds.load() 函數來下載數據,該函數需要特別注意一個參數 as_supervised,該參數設置為 as_supervised=True,這樣函數就會返回一個二元組 (input, label) ,而不是返回 FeaturesDict ,因為二元組的形式更方便理解和使用;接下來,指定 with_info=True ,這樣就可以得到函數處理的信息,以便加深對數據的理解,代碼如下:

import tensorflow_datasets as tfdsSPLIT_WEIGHTS = (8, 1, 1)splits = tfds.Split.TRAIN.subsplit(weighted=SPLIT_WEIGHTS)(raw_train, raw_validation, raw_test), metadata = tfds.load(name="tf_flowers", with_info=True, split=list(splits),# specifying batch_size=-1 will load full dataset in the memory# batch_size=-1,# as_supervised: `bool`, if `True`, the returned `tf.data.Dataset`# will have a 2-tuple structure `(input, label)` as_supervised=True)

1.2 對數據集進行預處理

從 TensorFlow Datasets 中下載的數據集包含很多不同尺寸的圖片,我們需要將這些圖像的尺寸調整為固定的大小,并且將所有像素值都進行標準化,使得像素值的變化范圍都在 0~1 之間。這些操作顯得繁瑣無用,但是我們必須進行這些預處理操作,因為在訓練一個卷積神經網絡之前,我們必須指定它的輸入維度。不僅如此,網絡中最后全連接層的 shape 取決于 CNN 的輸入維度,因此這些預處理的操作是很有必要的。

如下所示,我們將構建函數 format_exmaple(),并將它傳遞給 raw_train, raw_validation 和 raw_test 的映射函數,從而完成對數據的預處理。需要指明的是,format_exmaple() 的參數和傳遞給 tfds.load() 的參數有關:如果 as_supervised=True,那么 tfds.load() 將下載二元組 (image, labels) ,該二元組將作為參數傳遞給 format_exmaple();如果 as_supervised=False,那么 tfds.load() 將下載一個字典 ,該字典將作為參數傳遞給 format_exmaple() 。

def format_example(image, label): image = tf.cast(image, tf.float32) # Normalize the pixel values image = image / 255.0 # Resize the image image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE)) return image, labeltrain = raw_train.map(format_example)validation = raw_validation.map(format_example)test = raw_test.map(format_example)

除此之外,我們還對 train 對象調用 .shuffle(BUFFER_SIZE) ,用于打亂訓練集的順序,該操作能夠消除樣本的次序偏差。Shuffle 的緩沖區大小最后設置得和數據集一樣大,這樣能夠保證數據被充分的打亂。接下來我們要用 .batch(BATCH_SIZE) 來定義這三類數據集的 batch 大小,這里我們將 batch 的大小設置為 32 。最后我們用 .prefetch() 在后臺預加載數據,該操作能夠在模型訓練的時候進行,從而減少訓練時間,下圖直觀地描述了 .prefetch() 的作用。

不采取 prefetch 操作,CPUGPU/TPU 的大部分時間都處在空閑狀態

采取 prefetch 操作后,CPU 和 GPU/TPU 的空閑時間顯著較少

在該步驟中,有幾點值得注意:

操作順序很重要。如果先執行 .shuffle() 操作,再執行 .repeat() 操作,那么將進行跨 batch 的數據打亂操作,每個 epoch 中的 batch 數據都是被提前打亂的,而不用每次加載一個 batch 就打亂依一次它的數據順序;如果先執行 .repeat() 操作,再執行 .shuffle() 操作,那么每次只有單個 batch 內的數據次序被打亂,而不會進行跨 batch 的數據打亂操作。

將 buffer_size 設置為和數據集大小一樣,這樣數據能夠被充分的打亂,但是 buffer_size 過大會導致消耗更多的內存。

在開始進行打亂操作之前,系統會分配一個緩沖區,用于存放即將進行打亂的數據,因此在數據集開始工作之前,過大的 buffer_size 會導致一定的延時。

在緩沖區沒有完全釋放之前,正在執行打亂操作的數據集不會報告數據集的結尾。而數據集會被 .repeat() 重啟,這將會又一次導致 3 中提到的延時。

上面提到的 .shuffle ()和 .repeat(),可以用 tf.data.Dataset.apply() 中的 tf.data.experimental.shuffle_and_repeat() 來代替:

ds = image_label_ds.apply( tf.data.experimental.shuffle_and_repeat(buffer_size=image_count))ds = ds.batch(BATCH_SIZE)ds = ds.prefetch(buffer_size=AUTOTUNE)

1.3 數據增廣

數據增廣是提高深度學習模型魯棒性的重要技術,它可以防止過擬合,并且能夠幫助模型理解不同數據類的獨有特征。例如,我們想要得到一個能區分“向日葵”和“郁金香”的模型,如果模型只學習了花的顏色從而進行辨別,那顯然是不夠的。我們希望模型能夠理解花瓣的形狀和相對大小,是否存在圓盤小花等等。

為了防止模型使用顏色作為主要的判別依據,可以使用黑白圖片或者改變圖片的亮度參數。為了減小圖片拍攝方向導致的偏差,可以隨機旋轉數據集中的圖片,依次類推,可以得到更多增廣的圖像。

在訓練階段,對數據進行實時增廣操作,而不是手動的將這些增廣圖像添加到數據上。用如下所示的映射函數來實現不同類型的數據增廣:

defaugment_data(image,label): print("Augment data called!") image = tf.image.random_flip_left_right(image) image = tf.image.random_contrast(image, lower=0.0, upper=1.0) # Add more augmentation of your choice return image, labeltrain = train.map(augment_data)

1.4 數據集可視化

通過可視化數據集中的一些隨機樣本,不僅可以發現其中存在的異常或者偏差,還可以發現特定類別的圖像的變化或相似程度。使用 train.take() 可以批量獲取數據集,并將其轉化為 numpy 數組, tfds.as_numpy(train) 也具有相同的作用,如下代碼所示:

plt.figure(figsize=(12,12)) for batch in train.take(1): for i in range(9): image, label = batch[0][i], batch[1][i] plt.subplot(3, 3, i+1) plt.imshow(image.numpy()) plt.title(get_label_name(label.numpy())) plt.grid(False) # ORfor batch in tfds.as_numpy(train): for i in range(9): image, label = batch[0][i], batch[1][i] plt.subplot(3, 3, i+1) plt.imshow(image) plt.title(get_label_name(label)) plt.grid(False) # We need to break the loop else the outer loop # will loop over all the batches in the training set break

運行上述代碼,我們得到了一些樣本圖像的可視化結果,如下所示:

2. 用tf.keras 搭建一個簡單的CNN模型

tf.keras 是一個符合 Keras API 標準的 TensorFlow 實現,它是一個用于構建和訓練模型的高級API,而且對 TensorFlow 特定功能的支持相當好(例如 eager execution 和 tf.data 管道)。 tf.keras 不僅讓 TensorFlow 變得更加易于使用,而且還保留了它的靈活和高效。

張量 (image_height, image_width, color_channels) 作為模型的輸入,在這里不用考慮 batch 的大小。黑白圖像只有一個顏色通道,而彩色圖像具有三個顏色通道 (R,G,B) 。在此,我們采用彩色圖像作為輸入,輸入圖像尺寸為 (128,128,3) ,將該參數傳遞給 shape,從而完成輸入層的構建。

接下來我們將用一種很常見的模式構建 CNN 的卷積部分:一系列堆疊的 Conv2D 層和 MaxPooling2D 層,如下面的代碼所示。最后,將卷積部分的輸出((28,28,64)的張量)饋送到一個或多個全連接層中,從而實現分類。

值得注意的是,全連接層的輸入必須是一維的向量,而卷積部分的輸出卻是三維的張量。因此我們需要先將三維的張量展平成一維的向量,然后再將該向量輸入到全連接層中。數據集中有 5 個類別,這些信息可以從數據集的元數據中獲取。因此,模型最后一個全連接層的輸出是一個長度為 5 的向量,再用 softmax 函數對它進行激活,至此就構建好了 CNN 模型。

from tensorflow import keras# Creating a simple CNN model in keras using functional APIdef create_model(): img_inputs = keras.Input(shape=IMG_SHAPE) conv_1 = keras.layers.Conv2D(32, (3, 3), activation='relu')(img_inputs) maxpool_1 = keras.layers.MaxPooling2D((2, 2))(conv_1) conv_2 = keras.layers.Conv2D(64, (3, 3), activation='relu')(maxpool_1) maxpool_2 = keras.layers.MaxPooling2D((2, 2))(conv_2) conv_3 = keras.layers.Conv2D(64, (3, 3), activation='relu')(maxpool_2) flatten = keras.layers.Flatten()(conv_3) dense_1 = keras.layers.Dense(64, activation='relu')(flatten) output = keras.layers.Dense(metadata.features['label'].num_classes, activation='softmax')(dense_1) model = keras.Model(inputs=img_inputs, outputs=output) return model

上面的模型是通過 Kearas 的 Functional API 構建的,在 Keras中 還有另一種構建模型的方式,即使用 Model Subclassing API,它按照面向對象的結構來構建模型并定義它的前向傳遞過程。

2.1 編譯和訓練模型

在 Keras 中,編譯模型就是為其設置訓練過程的參數,即設置優化器、損失函數和評估指標。通過調用 model 的 .fit() 函數來設置這些參數,例如可以設置訓練的 epoch 次數,再例如直接對 trian 和 validation 調用 .repeat() 功能,并傳遞給 .fit() 函數,這樣就可以保證模型在數據集上循環訓練指定的 epoch 次數。

在調用 .fit() 函數之前,我們需要先計算幾個相關的參數:

# Calculating number of images in train, val and test setsnum_train, num_val, num_test = (metadata.splits['train'].num_examples * weight/10 for weight in SPLIT_WEIGHTS)steps_per_epoch = round(num_train)//BATCH_SIZEvalidation_steps = round(num_val)//BATCH_SIZE

如上代碼所示,由于下載的數據集沒有定義標準的分割形式,我們通過設置 8:1:1 的分割比例,將數據集依次分為訓練集、驗證集和測試驗證集。

steps_per_epoch:該參數定義了訓練過程中,一個 epoch 內 batch 的數量,該參數的值等于樣本數量除以 batch 的大小。

validation_steps:該參數和 steps_per_epoch 具有相同的內涵,只是該參數用于驗證集。

def train_model(model): model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Creating Keras callbacks tensorboard_callback = keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1) model_checkpoint_callback = keras.callbacks.ModelCheckpoint( 'training_checkpoints/weights.{epoch:02d}-{val_loss:.2f}.hdf5', period=5) os.makedirs('training_checkpoints/', exist_ok=True) early_stopping_checkpoint = keras.callbacks.EarlyStopping(patience=5) history = model.fit(train.repeat(), epochs=epochs, steps_per_epoch=steps_per_epoch, validation_data=validation.repeat(), validation_steps=validation_steps, callbacks=[tensorboard_callback, model_checkpoint_callback, early_stopping_checkpoint]) return history

2.2 可視化訓練過程中的評估指標變化

如下圖所示,我們將訓練集和驗證集上的評估指標進行了可視化,該指標為 train_model() 或者 manually_train_model() 的返回值。在這里,我們使用 Matplotlib 繪制曲線圖:

訓練集和驗證集的評估指標隨著訓練epoch的變化

這些可視化圖能讓我們更加深入了解模型的訓練程度。在模型訓練過程中,確保訓練集和驗證集的精度在逐漸增加,而損失逐漸減少,這是非常重要的。

如果訓練精度高但驗證精度低,那么模型很可能出現了過擬合。這時我們需要對數據進行增廣,或者直接從網上下載更多的圖像,從而增加訓練集。此外,還可以采用一些防止過擬合的技術,例如 Dropout 或者 BatchNormalisation 。

如果訓練精度和驗證精度都較高,但是驗證精度比訓練精度略高,那么驗證集很可能包含較多易于分類的圖像。有時我們使用 Dropout 和 BatchNorm 等技術來防止過擬合,但是這些操作會為訓練過程添加一些隨機性,使得訓練更加困難,因此模型在驗證集上表現會更好些。稍微拓展一點講,由于訓練集的評估指標是對一個 epoch 的平均估計,而驗證集的評估指標卻是在這個 epoch 結束后,再對驗證集進行評估的,因此驗證集所用的模型可以說要比訓練集的模型訓練的更久一些。

TensorFlow2.0 可以在 Jupyter notebook 中使用功能齊全的 TensorBoard 。在模型開始訓練之前,先啟動 TensorBoard ,這樣我們就可以在訓練過程中動態觀察這些評估指標的變化。如下代碼所示(注意:需要提前創建 logs/ 文件夾):

%load_ext tensorboard.notebook%tensorboard --logdir logs/

Jupyer notebook 中的TensorBoard 視圖

3. 使用預訓練的模型

在上一節中,我們訓練了一個簡單的 CNN 模型,它給出了大約 70% 的準確率。通過使用更大、更復雜的模型,獲得更高的準確率,預訓練模型是一個很好的選擇。預訓練模型通常已經在大型的數據集上進行過訓練,通常用于完成大型的圖像分類任務。直接使用預訓練模型來完成我們的分類任務,我們也可以運用遷移學習的方法,只使用預訓練模型的一部分,重新構建屬于自己的模型。

簡單來講,遷移學習可以理解為:一個在足夠大的數據集上經過訓練的模型,能夠有效地作為視覺感知的通用模型,通過使用該模型的特征映射,我們就可以構建一個魯棒性很強的模型,而不需要很多的數據去訓練。

3.1 下載預訓練模型

本次將要用到的模型是由谷歌開發的 InceptionV3 模型,該模型已經在 ImageNet 數據集上進行過預訓練,該數據集含有 1.4M 張圖像和相應的 1000 個類別。InceptionV3 已經學習了我們常見的 1000 種物體的基本特征,因此,該模型具有強大的特征提取能力。

模型下載時,需要指定參數 include_top=False,該參數使得下載的模型不包含最頂層的分類層,因為我們只想使用該模型進行特征提取,而不是直接使用該模型進行分類。預訓練模型的分類模塊通常受原始的分類任務限制,如果想將預訓練模型用在新的分類任務上,我們需要自己構建模型的分類模塊,而且需要將該模塊在新的數據集上進行訓練,這樣才能使模型適應新的分類任務。

from tensorflow import keras# Create the base model from the pre-trained model MobileNet V2base_model = keras.applications.InceptionV3(input_shape=IMG_SHAPE,# We cannot use the top classification layer of the pre-trained model as it contains 1000 classes.# It also restricts our input dimensions to that which this model is trained on (default: 299x299) include_top=False, weights='imagenet')

我們將預訓練模型當做一個特征提取器,輸入(128,128,3)的圖像,得到(2,2,2048)的輸出特征。特征提取器可以理解為一個特征映射過程,最終的輸出特征是輸入的多維表示,在新的特征空間中,更加利于圖像的分類。

3.2 添加頂層的分類層

由于指定了參數 include_top=False,下載的 InceptionV3 模型不包含最頂層的分類層,因此我們需要添加一個新的分類層,而且它是為 tf_flowers 所專門定制的。通過 Keras 的序列模型 API,將新的分類層堆疊在下載的預訓練模型之上,代碼如下:

def build_model(): # Using Sequential API to stack up the layers model = keras.Sequential([ base_model, keras.layers.GlobalAveragePooling2D(), keras.layers.Dense(metadata.features['label'].num_classes, activation='softmax') ]) # Compile the model to configure training parameters model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) return modelinception_model = build_model()

以上代碼理解如下:

對于每張圖片,使用 keras.layers.GlobalAveragePooling2D() 層對提取的特征 (2x2x2048) 進行平均池化,從而將該特征轉化為長度為 2048 的向量。

在平均池化層之上,添加一個全連接層 keras.layers.Dense(),將長度為 2048 的向量轉化為長度為 5 的向量。

值得注意的是,在模型的編譯和訓練過程中,我們使用 base_model.trainable = False 將卷積模塊進行了凍結,該操作可以防止在訓練期間更新卷積模塊的權重,接下來就可以在 tf_flowers 數據集上進行模型訓練了。

3.3 訓練頂層的分類層

訓練的步驟和上文中 CNN 的訓練步驟相同,如下圖所示,我們繪制了訓練集和驗證集的判據指標隨訓練過程變化的曲線圖:

開始訓練預訓練模型后,訓練集和驗證集的評估指標隨著訓練epoch的變化

從圖中可以看到,驗證集的精度高略高于訓練集的精度。這是一個好兆頭,說明該模型的泛化能力較好,使用測試集來評估模型可以進一步驗證模型的泛化能力。如果想讓模型取得更好的效果,對模型進行微調。

3.4 對預訓練網絡進行微調

在上面的步驟中,我們僅在 InceptionV3 模型的基礎上簡單訓練了幾層網絡,而且在訓練期間并沒有更新其卷積模塊的網絡權重。為了進一步提高模型的性能,對卷積模塊的頂層進行微調。在此過程中,卷積模塊的頂層和我們自定義的分類層聯系了起來,它們都將為 tf_flowers 數據集提供定制化的服務。具體的內容可以參見 TensorFlow 的官網解釋。

鏈接:

https://www.tensorflow.org/alpha/tutorials/images/transfer_learning#fine_tuning

下面的代碼將 InceptionV3 的卷積模塊頂層進行了解凍,使得它的權重可以跟隨訓練過程進行改變。由于模型已經發生了改變,不再是上一步的模型了,因此在訓練新的模型之前,我們需要對模型重新編譯一遍。

# Un-freeze the top layers of the modelbase_model.trainable = True# Let's take a look to see how many layers are in the base modelprint("Number of layers in the base model: ", len(base_model.layers))# Fine tune from this layer onwardsfine_tune_at = 249# Freeze all the layers before the `fine_tune_at` layerfor layer in base_model.layers[:fine_tune_at]: layer.trainable = False# Compile the model using a much lower learning rate.inception_model.compile(optimizer = tf.keras.optimizers.RMSprop(lr=0.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])history_fine = inception_model.fit(train.repeat(), steps_per_epoch = steps_per_epoch, epochs = finetune_epochs, initial_epoch = initial_epoch, validation_data = validation.repeat(), validation_steps = validation_steps)

微調的目的是使得模型提取的特征更加適應新的數據集,因此,微調后的模型可以讓準確度提高好幾個百分點。但是如果我們的訓練數據集非常小,并且和 InceptionV3 原始的預訓練集非常相似,那么微調可能會導致模型過擬合。如下圖所示,在微調之后,我們再次繪制了訓練集和驗證集的評估指標的變化。

注意:本節中的微調操作是針對預訓練模型中的少量頂層卷積層進行的,所需要調節的參數量較少。如果我們將預訓練模型中所有的卷積層都解凍了,直接將該模型和自定義的分類層聯合,通過訓練算法對所有圖層進行訓練,那么梯度更新的量級是非常巨大的,而且預訓練模型將會忘記它曾經學會的東西,那么預訓練就沒有太大的意義了。

微調模型后,訓練集和驗證集的評估指標隨著訓練epoch的變化

從圖中可以看到,訓練集和驗證集的精度都有所提升。我們觀察到,在從微調開始的第一個 epoch 結束后,驗證集的誤差開始上升,但它最終還是隨著訓練過程而下降了。這可能是因為權重更新得過快,從而導致了震蕩。因此,相比于上一步中的模型,微調更加適合較低的學習率。

4. 使用 TensorFlow Serving 為模型發布服務

TensorFlow Serving 能夠將模型發布,從而使得我們能夠便捷地調用該模型,完成特定環境下的任務。TensorFlow Serving 將提供一個 URL 端點,我們只需要向該端點發送 POST 請求,就可以得到一個JSON 響應,該響應包含了模型的預測結果。可以看到,我們根本就不用擔心硬件配置的問題,一個簡單的 POST 請求就可以解決復雜的分類問題。

4.1 安裝 TensorFlow Serving

1、添加 TensorFlow Serving的源(一次性設置)

$ echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list && $ curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add -

2、安裝并更新 TensorFlow ModelServer

$ apt-get update && apt-get install tensorflow-model-server

一旦安裝完成,就可以使用如下命令開啟 TensorFlow Serving 服務。

$tensorflow_model_server

4.2 將 Keras 模型導出為 SavedModel 格式

為了將訓練好的模型加載到 TensorFlow Serving 服務器中,首先我們需要將模型保存為 SavedModel 格式。TensorFlow 提供了 SavedModel 格式的導出方法,該方法簡單易用,很快地導出 SavedModel 格式。

下面的代碼會在指定的目錄中創建一個 protobuf 文件,通過該文件,查詢模型的版本號。在實際的使用中,請求服務的版本號,TensorFlow Serving 將會為我們選擇相應版本的模型進行服務。每個版本的模型都會導出到相應的子目錄下。

from tensorflow import keras# '/1' specifies the version of a model, or "servable" we want to exportpath_to_saved_model = 'SavedModel/inceptionv3_128_tf_flowers/1'# Saving the keras model in SavedModel formatkeras.experimental.export_saved_model(inception_model, path_to_saved_model)# Load the saved keras model backrestored_saved_model = keras.experimental.load_from_saved_model(path_to_saved_model)

4.3 啟動 TensorFlow Serving 服務器

在本地啟動 TensorFlow Serving 服務器,可以使用如下代碼:

$ tensorflow_model_server --model_base_path=/home/ubuntu/Desktop/Medium/TF2.0/SavedModel/inceptionv3_128_tf_flowers/ --rest_api_port=9000 --model_name=FlowerClassifier

--model_base_path:該路徑必須指定為絕對路徑,否則就會報如下的錯誤:

Failed to start server. Error: Invalid argument: Expected model ImageClassifier to have an absolute path or URI; got base_path()=./inceptionv3_128_tf_flowers

--rest_api_port:Tensorflow Serving 將會在 8500 端口上啟動一個 gRPC ModelServer 服務,而 REST API 會在 9000 端口開啟。

--model_name:用于指定 Tensorflow Serving 服務器的名字,當我們發送 POST 請求的時候,將會用到服務器的名字。服務器的名字可以按照我們的喜好來指定。

4.4 向TensorFlow服務器發送 REST請求

TensorFlow ModelServer 支持 RESTful API。我們需要將預測請求作為一個 POST,發送到服務器的 REST 端點。在發送 POST 請求之前,先加載示例圖像,并對它做一些預處理。

TensorFlow Serving服務器的期望輸入為(1,128,128,3)的圖像,其中,"1" 代表 batch 的大小。通過使用 Keras 庫中的圖像預處理工具,能夠加載圖像并將其轉化為指定的大小。

服務器 REST 端點的 URL 遵循以下格式:

http://host:port/v1/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]:predict

其中,/versions/${MODEL_VERSION} 是一個可選項,用于選擇服務的版本號。下面的代碼先加載了輸入圖像,并對其進行了預處理,然后使用上面的 REST 端點發送 POST 請求:

import json, requestsfrom tensorflow.keras.preprocessing.image import img_to_array, load_imgimport numpy as npimage_path = 'sunflower.jpg'# Loading and pre-processing our input imageimg = image.img_to_array(image.load_img(image_path, target_size=(128, 128))) / 255.img = np.expand_dims(img, axis=0)payload = {"instances": img.tolist()}# sending post request to TensorFlow Serving serverjson_response = requests.post('http://localhost:9000/v1/models/FlowerClassifier:predict', json=payload)pred = json.loads(json_response.content.decode('utf-8'))# Decoding the response using decode_predictions() helper function# You can pass "k=5" to get top 5 predicitonsget_top_k_predictions(pred, k=3)

代碼的輸出如下:

Top 3 predictions:[('sunflowers', 0.978735), ('tulips', 0.0145516), ('roses', 0.00366251)]

5. 總結

最后對本文的要點簡單總結如下:

利用 TensorFlow Datasets ,我們只需要幾行代碼,就可以下載公開可用的數據集。不僅如此, TensorFlow Datasets 還能有效構建數據集,對模型訓練有很大的幫助。

tf.keras 不僅能夠讓我們從頭開始構建一個 CNN 模型,它還能幫助我們利用預訓練的模型,在短時間內訓練一個有效的花卉分類模型,并且獲得更高的準確率。

使用 TensorFlow Serving 服務器能夠將訓練好的模型發布。我們只需要調用 URL 端點,就可以輕松將訓練好的模型集成到網站或者其他應用程序中。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據集
    +關注

    關注

    4

    文章

    1225

    瀏覽量

    25618
  • cnn
    cnn
    +關注

    關注

    3

    文章

    354

    瀏覽量

    22811
  • tensorflow
    +關注

    關注

    13

    文章

    330

    瀏覽量

    61286

原文標題:掌聲送給TensorFlow 2.0!用Keras搭建一個CNN | 入門教程

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何搭建DotNet Core 21自動化構建和部署環境

    邊緣化搭建DotNet Core 21 自動化構建和部署環境(上)
    發表于 04-23 14:53

    高階API構建模型和數據集使用

    TensorFlow2.0Beta版本,同pytorch一樣支持動態執行(TensorFlow2.0默認eager模式,無需啟動會話執行計算圖),同時刪除了雜亂低階API,使用高階API簡單地構建復雜神經網絡模型,本文主要分享
    發表于 11-04 07:49

    VoLTE部署10大關鍵問題你都了解嗎

    VoLTE部署10大關鍵問題你都了解嗎
    發表于 05-21 06:18

    如何使用pycoral、tensorflow-lite和edgetpu構建核心最小圖像

    如果您能告訴我們如何使用 pycoral、tensorflow-lite 和 edgetpu 構建核心最小圖像,我們將不勝感激。
    發表于 06-05 10:53

    使用MobilenetV2、ARM NN和TensorFlow Lite Delegate預建二進制文件進行圖像分類教程

    本指南回顧了使用ARM NN TensorFlow Lite Delegate(ARM NN TfLite Delegate)進行圖像分類的示例應用程序。 該指南解釋了如何構建應用程序
    發表于 08-28 06:12

    為WiMAX構建的網絡架構

    本文首先分析了WiMAX技術的市場驅動力和影響其成功部署的關鍵因素,隨后介紹了一個基于WiMAX接入技術的網絡架構,包括回程、匯聚、接入控制、以及核心網絡,并對該網絡
    發表于 06-16 11:34 ?584次閱讀

    基于WiMAX接入技術的網絡架構

    基于WiMAX接入技術的網絡架構 本文首先分析了WiMAX技術的市場驅動力和影響其成功部署的關鍵因素,隨后介紹了一個基于WiMAX接入技術的
    發表于 10-20 21:03 ?787次閱讀

    TensorFlow2.0終于問世,Alpha版可以搶先體驗

    之前開發者反饋,希望TensorFlow能夠簡化API、減少冗余并改進文檔和示例。這次2.0發布,聽取了開發者的建議,因此新版本有以下三大特點:簡單、強大、可拓展。
    的頭像 發表于 03-08 09:30 ?3914次閱讀
    <b class='flag-5'>TensorFlow2.0</b>終于問世,Alpha版可以搶先體驗

    tensorflow能做什么_tensorflow2.0和1.0區別

    TensorFlow為張量從流圖的一-流動到另一計 算過程。TensorFlow是將 復雜的數據結構傳輸至人工智能神經網中進行分析和處理過程的系統。
    的頭像 發表于 12-04 14:45 ?8341次閱讀

    基于深度神經網絡的圖像壓縮方法

    人工設計的算法分別進行優化近年來,基于深度神經網絡的圖像壓縮方法在圖像壓縮中取得了豐碩的成果,相比傳統方法,
    發表于 04-08 09:30 ?16次下載
    基于深度神經網絡的<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b><b class='flag-5'>圖像</b>壓縮方法

    基于生成式對抗網絡的圖像去霧模型

    針對現有圖像去霧算法嚴重依賴中間量準確估計的問題,提出了一種基于 Wasserstein生成對抗網絡(wGAN)的圖像去霧模型。首先,
    發表于 04-12 15:03 ?20次下載
    基于生成式對抗網絡的<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b><b class='flag-5'>圖像</b>去霧模型

    一種對紅細胞和白細胞圖像分類任務的主動學習工作流程

    細胞成像的分割和分類等技術是一個快速發展的領域研究。就像在其他機器學習領域一樣,數據的標注是非常昂貴的,并且對于數據標注的質量要求也非常的高。針對這一問題,本篇文章介紹一種對紅細胞和白細胞圖像分類任務的主動學習
    的頭像 發表于 08-13 10:27 ?1707次閱讀

    構建的流程體系

    所謂流程的架構體系,就是一套有層次的流程管理體系。這種層次體現在由上至下、由整體
    的頭像 發表于 06-01 15:09 ?2594次閱讀
    <b class='flag-5'>構建</b><b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>的流程體系

    HDR Vivid產業鏈加速構建

    HDR Vivid的高動態范圍的行標自發布以來,已獲得內容生產制作工具、平臺、編解碼系統、芯片、終端等產業鏈的認可、驗證及商用支持,產業鏈正加速構建,越來越多的熱門劇集如《三體》
    的頭像 發表于 06-05 15:26 ?1293次閱讀

    華為IPv6+解決方案通過信通院IPv6+ 2.0 Advanced測試評估

    近日,華為IPv6+解決方案成功通過中國信息通信研究院(以下簡稱“信通院”)IPv6+ 2.0 Advanced測試評估,獲得業界首張企業/行業網絡
    的頭像 發表于 05-17 10:00 ?1415次閱讀
    華為IPv6+<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>解決方案通過信通院IPv6+ <b class='flag-5'>2.0</b> Advanced測試評估
    主站蜘蛛池模板: 国产a国产片国产 | 女同性久久产国女同久久98 | 亚洲中文无码永久免 | 日韩黄色片免费看 | 日本 片 成人 在线 日本 在线 | 18禁真人抽搐一进一出动态图 | 黑白配高清在线观看免费版中文 | 麻豆久久久9性大片 | 久久国产精久久精产国 | 无套中出丰满人妻无码 | 精品久久久免费视频 | 99在线成人精品视频 | а天堂中文最新一区二区三区 | 久久国产欧美日韩精品图片 | 日本理论中文字幕 | 黄色理伦 | 亚洲专区路线一路线二高质量 | 俄罗斯丰满熟妇hd | 97久久超碰精品视觉盛宴 | av网站免费在线观看 | 国产一级片a | 国产精品一品二区三区四区五区 | 欧美 丝袜 自拍 制服 另类 | 超碰成人97 | 中文幕无线码中文字蜜桃 | 日韩一中文字幕 | 霍思燕三级 | 九九九亚洲 | 欧洲精品码一区二区三区 | 99热中文| 四季av中文字幕 | 亚洲免费黄色 | 456成人网| 亚洲黄色在线网站 | 另类色视频 | 国产亚洲精品久久久91 | 日韩黄色一级片 | 国模一区二区三区白浆 | 日本又色又爽又黄的a片18禁 | 亚洲精品久久久久999中文字幕 | 黄色精品在线观看 | 清清草在线视频 | 欧美国产成人精品 | 少妇高潮毛片 | 国产一区二区三区视频 | 国产精品久久久久久久免费观看 | 日韩性生交大片免费看 | 粗暴video蹂躏hd | 国产精品1区2区3区 国产精品1区2区3区4区 | 久久综合伊人 | 看毛片网| 懂色av色吟av夜夜嗨 | 日本aaaaa高潮免费 | 国产成人久久av免费看 | 91成人免费 | 五月天黄色av | 亚洲一区二区三区四区 | 日韩成人无码 | 久久国产精久久精产国 | a天堂在线 | 丰满少妇理论片bd高清 | 国产三级按摩推拿按摩 | 日韩黄站 | 亚洲第一伊人 | 狂野欧美性猛交xxxxhd | 午夜在线影院 | 狠狠色色综合网站 | 风流少妇按摩来高潮 | 日本免费www | 狠狠干2021 | 亚洲色成人网站www永久四虎 | 久久爽久久爽久久免费观看 | 国产又粗又猛又爽视频上高潮 | 夜夜躁狠狠躁日日躁av麻豆 | 欧洲做受高潮片 | 久久久五月| 色偷av| 欧美成人ⅴideosxxxxx | 日本免费一区二区三区最新 | 久久精品中文字幕有码 | 日韩欧美一区二区三区四区 | 无人在线观看的免费高清视频 | 影音先锋啪啪看片资源 | 中文在线一区 | 中文字幕免费在线 | 国产精品成人一区无码 | 亚洲石原莉奈一区二区在线观看 | jzz在线观看 | 亚洲蜜臀av乱码久久精品蜜桃 | 欧美一区二区三区激情视频 | 亚洲九色 | 亚洲男人第一网站 | 精品国产一区二区三区久久久蜜月 | 日韩欧美理论 | 久久在线免费 | 在线不卡一区二区 | 中国黄色三级 | 午夜免费毛片 | 亚洲成a人片在线观看天堂无码 | 色一情一乱一伦 | 色偷偷网站视频 | 亚洲视频入口 | 放荡艳妇的疯狂呻吟中文视频 | 在线永久免费观看黄网站 | 噜噜噜噜狠狠狠7777视频 | 亚洲精品成人在线视频 | 无码免费一区二区三区免费播放 | 大吊一区二区三区 | 红桃视频 国产 | 三级久久 | 官场艳妇疯狂性关系 | 视频一区二区三区在线观看 | www.51色.com | 欧洲无码一区二区三区在线观看 | 国产精品爽爽 | 精品在线视频一区 | 狠久久| 国产sm重味一区二区三区 | 美女在线一区 | 日韩av高清在线观看 | 欧美群妇大交群 | 在线天堂www在线国语对白 | 精品视频一区二区三区四区 | 日本a√在线观看 | 极品销魂美女少妇尤物优美 | www.黄色免费 | 日日日噜噜噜 | 婷婷嫩草国产精品一区二区三区 | 黑人做爰xxxⅹ性少妇69 | 久草三级| 性欧美jzjz2| 久久人人爽爽人人爽人人片av | 天天做天天干 | 日日免费视频 | 农村少妇吞精夜夜爽视频 | 成人短视频在线观看 | 亚洲视频播放 | 狠狠色丁香婷婷久久综合不卡 | 精品国产一区二区三区av爱情岛 | 亚洲欧美影院 | 热99re6久精品国产首页青柠 | 中文字幕第一区 | 国产69精品久久久久777 | 内射爽无广熟女亚洲 | 日本japanese丰满白浆 | 26uuu成人网| 国产裸体永久免费视频网站 | 在线观看免费人成视频 | 国产精品日日夜夜 | 黄色一级免费视频 | 九一国产在线观看 | 日本高清视频www在线观看 | 九九九热精品免费视频观看网站 | av激情四射| www.日本高清 | 国产三级毛片视频 | 欧美大成色www永久网站婷 | 亚洲国产欧美日韩 | 亚洲精品国产精品国自产网站 | 性一交一乱一透一a级 | 欧美黄色毛片 | 成人免费淫片aa视频免费 | 日本人操比 | 国产亚洲精品久久久久久国模美 | 国产精品久久久久久久久免小说 | 日本无遮挡吸乳呻吟免费视频网站 | 亚州国产精品 | 五月天婷婷免费视频 | 香港经典a毛片免费观看播放 | 中文字幕一区二 | 在线一区av | 亚州性无码不卡免费视频 | 一本一道dvd在线观看免费视频 | 韩国明星乱淫(高h)小说 | 青草视频在线播放 | 欧美性猛交xxxxx按摩欧美 | 国产乱人对白 | 国产精品久久久一区 | 伊人情人综合 | 日韩av第一页在线播放 | 国产ts网站 | 四虎影视库 | 最新中文无码字字幕在线 | yy6080亚洲精品一区 | 天堂欧美城网站网址 | 亚洲国产一二三 | 97人人艹| 日韩最新视频 | 中文字幕精品亚洲无线码一区应用 | 日本精品久久 | 国产精品―色哟哟 | 国内精品久久久久久久果冻传媒 | 日本三级欧美三级 | 色婷婷国产精品视频 | 日本一区二区不卡在线 | 国产巨乳在线观看 | 欧美精品亚洲精品日韩精品 | 天天综合网永久 | 欧美午夜精品久久久久免费视 | 日本黄视频网站 | 欧美色图在线视频 | 成人性视频sm | 欧美67194 | 亚洲aⅴ无码成人网站国产app | 国产亚洲精品久久久久久国模美 | 五月婷婷综合激情网 | 国产伦精品一区二区三区免费观看 | 天天av天天翘天天综合网 | 亚洲第一福利网站 | 午夜免费高清视频 | 日韩少妇内射免费播放 | 快色网站 | zzjizzji亚洲日本少妇 | 丰满少妇69激情啪啪无 | 在线中文av | 亚洲色图2 | 日本欧美亚洲 | 欧美丰满熟妇bbb久久久 | 91精品国产777在线观看 | 亚洲精品一区二区三区在线观看 | 久久天天躁狠狠躁夜夜97 | 一级性生活大片 | 国产一区二区精品在线 | 欧美黑人一级爽快片淫片高清 | 黑人videos3d极品另类 | 视频在线观看网站免费 | 亚洲国产又黄又爽女人高潮的 | jizzyou中国少妇农村 | 欧美综合视频在线观看 | a天堂在线观看视频 | 欧美成人性生交大片免费看 | 日本添下边视频全过程 | 精品久久久久久亚洲综合网站 | 精品少妇爆乳无码av无码专区 | 和岳每晚弄的高潮嗷嗷叫视频 | 亚洲在av人极品无码网站 | 国产一级片久久 | 又色又爽无遮挡免费视频男男 | 久爱精品 | 91免费在线播放 | 天天摸天天做天天爽水多 | 少妇被爽到高潮动态图 | 日本理伦片973影视 日本理论片在线 | 韩国三级在线视频 | 性一交一乱一色一视频 | 太深太粗太爽太猛了视频免费观看 | 特级无码毛片免费视频尤物 | 国产精品久久久久久白浆 | 国产福利精品一区二区 | 99在线精品免费视频 | 美女av免费观看 | 97久久综合 | 成人手机在线免费视频 | 青青草99热| 无码不卡av东京热毛片 | 久久国内 | 看黄色大片| 日本丰满熟妇videossex | 大肉大捧一进一出好爽 | 国产91 在线播放 | 伊人久久噜噜噜躁狠狠躁 | 免费99精品国产自在在线 | 国产精品老热丝在线观看 | 国产在线视频一区二区三区 | 国产三级国产精品 | 肉体公尝中文字幕第三部 | www久久99| 天天cao在线 | 日本sm极度另类视频 | a4yy午夜 | 亚洲欧洲美洲无码精品va | 最新中文字幕在线 | 国产夫妻性生活 | 青青草无码免费一二三区 | 亚洲色图图片区 | 亚洲另类春色校园小说 | 欧美激情高潮 | 成年人黄色免费网站 | 欧美在线色图 | 一区二区三区回区在观看免费视频 | 日韩欧美高清在线观看 | 久久久xxxx | 成人欧美一区二区三区白人 | 久久999精品久久久有什么优势 | 一极黄色大片 | 成人性生交大片免费看视频hd | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲线精品一区二区三区 | 伊人网成人 | 久久99精品一区二区蜜桃臀 | 欧美激情精品久久久久 | 国产精品99久久久久久大便 | 国产成人高清精品免费 | 97色伦97色伦国产欧美空 | 99久久免费只有精品国产 | 香港三日本三级少妇少99 | 国产精品美女视频 | 亚洲人av在线 | 青青草无码精品伊人久久 | 岛国午夜视频 | 国产又粗又猛又大爽老大爷 | 国产成人在线视频观看 | 国产精品偷伦视频免费还看的 | av软件网站 | 国产aⅴ爽av久久久久成人 | 亚洲欧洲日产国产 最新 | 国产欧美精品国产国产专区 | 一区二区在线不卡 | 欧美亚洲视频一区 | 精品欧美一区二区三区 | 怡红院成人av | 91精品国产综合久久小仙女图片 | 国语对白91 | 国产精品久久久久久模特 | 黄色一级免费大片 | 天堂av男人在线播放 | 97青草超碰久久国内精品91 | 69看片 | 96久久精品| 人妻熟女一区二区aⅴ图片 亚洲成a v人片在线观看 | 国产中年夫妇交换高潮呻吟 | 久久99免费 | 国产内射爽爽大片视频社区在线 | 成人精品一区二区三区电影 | 99国产精品一区 | 播色网| 国产性生大片免费观看性 | 久久久精品久久日韩一区综合 | 澳门一级黄色片 | 国内揄拍国内精品少妇国语 | 久久777| 久久亚洲视频 | 久久精品亚洲日本波多野结衣 | 免费人成在线观看网站 | 亚洲精品亚洲人成人网 | 国产精品欧美亚洲777777 | 久久99精品久久久久久秒播九色 | 亚洲色一区二区三区四区 | 91青青操| 三级在线观看 | 少妇高潮喷水在线观看 | 日本少妇做爰免费视频软件 | 免费毛片一区二区三区 | 神马午夜dy888| 国产精品v日韩精品v在线观看 | 噜噜噜久久亚洲精品国产品小说 | 国产成人无码区免费内射一片色欲 | 中文字幕123伦 | 亚洲精品va| 成熟妇人a片免费看网站 | av天堂久久天堂色综合 | 国产小视频在线免费观看 | 久久久久久亚洲国产精品 | 成年男人裸j网站 | 中文日韩在线观看 | 禁久久精品乱码 | 狠狠色噜噜狠狠狠狠777米奇 | 国产精品久久久久久亚洲伦 | 农民人伦一区二区三区剧情简介 | va婷婷在线免费观看 | 久久精品国产69国产精品亚洲 | 亚洲精品av羞羞禁网站 | 久久免费少妇高潮久久精品99 | 拔萝卜91| 欧美精品在线一区二区三区 | 超碰在线观看97 | 亚洲97| 国产麻花豆剧传媒精品mv在线 | 国产一区二区三区久久久 | 色偷偷噜噜噜亚洲男人的天堂 | 2024国产精品视频 | 精品美女一区二区 | 六十路熟妇乱子伦 | 国产欧美激情在线观看 | 国产日韩欧美不卡在线二区 | 51国产黑色丝袜高跟鞋 | 亚洲成av人片在线观看无码 | 国产精品玖玖玖 | 国产黄a三级三级三级av在线看 | 高清无码一区二区在线观看吞精 | 久久久77| 亚洲最大av资源站无码av网址 | 免费看日批 | 欧美皮鞭调教wwwcom | 第一av | 久久99精品久久久久 | 丁香婷婷亚洲 | 国产久热精品无码激情 | 最新毛片基地 | 夜夜操网| 国产免费av一区二区三区 | 精品欧美一区二区精品久久 | 国模av | 拔擦8x成人一区二区三区 | 香港三日三级少妇三级66 | 欧美日韩在线视频一区 | 性猛交xxxxx按摩中国 | jvid福利写真一区二区三区 | 一本大道久久香蕉成人网 | 亚洲精品视频在线看 | 激情小说视频在线 | 中文永久免费观看 | 美女撒尿aaaaa级 | 色视频成人在线观看免 | 亚洲天堂网在线视频 | 一区二区三区视频免费在线观看 | 久久| 久久久久久久久毛片精品 | a∨变态另类天堂无码专区 人妻丰满熟妇av无码区不卡 | 波多野吉衣在线视频 | 日本不卡网 | 麻豆精品国产精华精华液好用吗 | 你操综合| 小12萝8禁在线喷水观看 | 亚洲成人三区 | 精品欧美一区二区三区在线观看 | 青青草视频偷拍 | 亚洲午夜精品一区二区 | 真人祼交二十三式视频 | 国产无套内谢普通话对白91 | 久久国产精品福利一区二区三区 | 欧美亚洲第一区 | 哺乳期av| 中文字幕在线不卡 | 美国一级大黄一片免费中文 | 亚洲三级一区 | 亚洲天堂男人的天堂 | 日本黄色大片视频 | 91小视频| 黑森林福利视频导航 | 黑人巨茎大战白人美女 | av夜夜 | 伊人久久97 | 精品无码中文字幕在线 | hd最新国产人妖ts视频仙踪林 | 特级西西人体444www高清大胆 | 性欧美老人牲交xxxxx视频 | 日本少妇久久 | 51久久| 激情六月色 | 嫩草99 | 狠狠v欧美v日韩v亚洲ⅴ | 国产模特私拍xxxx | 国产成人综合在线观看不卡 | 国产一精品一av一免费爽爽 | 右手影院亚洲欧美 | 国产成人av一区二区三区不卡 | 女人18毛片毛片毛片毛片区二 | 色 成人 亚洲 | 国产娇小hdxxxx乱 | 红杏出墙记免费看 | 交专区videossex非洲 | 伊人网在线观看 | 国精产品一区一区三区mba视频 | 日本色网址| 97久久人人超碰caoprom欧美 | 亚洲+小说+欧美+激情+另类 | 麻豆亚洲| 侵犯亲女在线播放视频 | 丁香婷婷激情 | 欧美精品亚洲精品日韩专区 | 国产成人+亚洲欧洲+综合 | 国产无套粉嫩白浆内谢的出处 | 久久久久久久久久久国产 | 亚洲男人网 | 国产欧美精品一区二区三区四区 | 成人永久免费视频 | 另类欧美日韩 | 亚洲老妈激情一区二区三区 | 青青青草视频在线 | h视频在线免费看 | 青青福利视频 | 日韩黄色片免费看 | 亚洲爆乳无码一区二区三区 | 欧美成人午夜精品久久久 | 久久99热狠狠色一区二区 | 按摩房激情hd欧美 | 99在线观看免费视频 | 97久久精品一区二区三区观看 | 91国产丝袜在线播放动漫 | 伊人成长网| 91重口变态| 亚洲精品xxxxx | 国产日韩欧美成人 | 四虎音影| 99er6免费热在线观看精品 | 日本成a人片在线播放 | 国产色视频 | 人人干天天干 | 骚五月| 天天做天天爱夜夜爽导航 | 国模无码一区二区三区 | 日韩六九视频 | 黄色不卡视频 | 日日涩 | 国产在线拍偷自揄拍视频 | 国产成人午夜精华液 | 国产淫片av片久久久久久 | 大陆偷拍av| 国偷自产视频一区二区久 | 国产精品亚洲精品日韩已方 | 国产女人18毛片水真多18精品 | 亚洲欧美在线观看 | 韩国91视频 | 一线二线三线天堂 | 国产资源在线视频 | 中文天堂在线观看 | 欧美人与动人物牲交免费观看久久 | 蜜臀av免费一区二区三区久久乐 | 天天摸天天看天天做天天爽 | 国精品无码人妻一区二区三区 | 激情四射网 | 天堂成人国产精品一区 | 狠狠色香婷婷久久亚洲精品 | 在线国产一区二区三区 | 欧美日韩一区二区在线观看 | 蜜桃av在线看 | 四虎福利视频 | 欧美日韩中文国产一区 | 自拍偷拍中文字幕 | 欧美久久久久久久久久久久久久 | 免费全部高h视频无码 | 少妇中文字幕乱码亚洲影视 | 女人洗澡一级特黄毛片 | 女性脱给我揉视频 | 亚洲国产另类久久久精品网站 | 精品国产乱码久久久久软件 | 亚洲黄色自拍 | 欧美精品一区二区三区制服首页 | 亚欧精品在线观看 | 免费亚洲视频 | 18禁亚洲深夜福利入口 | 欧美一级做a爰片久久高潮 欧美一级做a爰片免费视频 | 婷婷91欧美777一二三区 | 97超碰站| 亚洲国产精品视频一区 | 久久国产精品精品国产 | 久久99精品久久久秒播 | 激情久久av一区av二区av三区 | 中文有码在线 | 成人免费看片又大又黄 | 成人无遮挡裸免费视频在线观看 | 一二三四免费观看在线视频中文版 | 综合久色| 日本久久高清一区二区三区毛片 | 丰满的少妇愉情hd高清果冻传媒 | 欧美成人精品欧美一级乱 | 亚洲春色av | 中文韩国午夜理伦三级好看 | 国产成人综合在线女婷五月99播放 | 日韩女优网站 | 欧美一级精品 | 欧洲老妇做爰xxxⅹ性视频 | 欧美伊人久久大香线蕉综合 | 熟女性饥渴一区二区三区 | 日韩一区欧美二区 | 高清毛片aaaaaaaaa片 | 永久免费未满蜜桃 | 亚洲国产精品综合 | 亚洲欧美色一区二区三区 | 三级久久 | www91视频com| 噜噜色综合 | 天堂中文8资源在线8 | 日本不卡免费新一二三区 | 7777kkkk成人观看 | 九九热伊人 | 久久夜夜操妹子 | 国产成人av一区二区三区 | 都市激情中文字幕 | 国产日日日| 国产午夜精品av一区二区麻豆 | 中文字幕视频在线播放 | 午夜婷婷 | 特级做a爰片毛片免费看无码 | 人妻少妇精品一区二区三区 | 午夜福利视频合集1000 | 欧美激情网站 | 亚洲精品国产摄像头 | 亚洲春色av | 国内精品久久久久久久久久久久 | 色综合久久88色综合天天免费 | 九九久久国产精品 | 亚洲一区成人 | 午夜av福利| 日韩精品欧美 | 一级特级毛片 | 黄色一级视频网 | 精品极品三大极久久久久 | 久久人人爽av亚洲精品天堂 | 99视频+国产日韩欧美 | 日日碰狠狠躁久久躁综合小说 | 99精品久久久久久久免费看蜜月 | 69xxx少妇按摩视频 | 最新毛片网 | 少妇又粗又猛又爽又黄的视频 | 成人中文字幕在线 | 正在播放东北夫妻内射 | 人人狠狠综合久久亚洲婷婷 | 国产午夜久久 | 久久伊人成人网 | 国产精品成人免费一区二区视频 | 男人的天堂视频网站 | 一级片在线 | 特大黑人巨交吊性xxxxhd | 国产一级啪啪 | 国语自产免费精品视频在 | 欧美三日本三级少妇三99r | 日本老头xxxx视频 | 阿拉伯性视频xxxx | 天堂√中文最新版在线 | 国产一在线精品一区在线观看 | 国产乱淫视频 | 黄片毛片av | 国产综合久久久久久鬼色 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品