日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

java导出mpp格式_tensorflow 模型导出总结

發(fā)布時間:2023/12/3 综合教程 56 生活家
生活随笔 收集整理的這篇文章主要介紹了 java导出mpp格式_tensorflow 模型导出总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • Checkpoints
    • 導出成CKPT
    • 加載CKPT
  • SavedModel
    • 導出為SavedModel
    • 加載SavedModel
      • Python 加載
      • JAVA 加載
      • CLI 加載
  • Frozen Graph
    • 導出為pb
      • python
      • CLI轉換工具
    • 模型加載
      • Python 加載
      • Java 加載
  • HDF5
    • HDF5導出
    • HDF5加載
  • tfLite
    • TFlite轉換
    • TFLite 加載
  • ref

tensorflow 1.0 以及2.0 提供了多種不同的模型導出格式,例如說有checkpoint,SavedModel,Frozen GraphDef,Keras model(HDF5) 以及用于移動端,嵌入式的TFLite。 本文主要講解了前4中導出格式,分別介紹了四種的導出的各種方式,以及加載,涉及了python以及java的實現(xiàn)。TFLite由于項目中沒有涉及,之后會補充。

模型導出主要包含了:參數以及網絡結構的導出,不同的導出格式可能是分別導出,或者是整合成一個獨立的文件。

  • 參數和網絡結構分開保存:checkpoint, SavedModel
  • 只保存權重:HDF5(可選)
  • 參數和網絡結構保存在一個文件:Frozen GraphDef,HDF5(可選)

在tensorflow 1.0中,可以見下圖,主要有三種主要的API,Keras,Estimator,以及Legacy即最初的session模型,其中tf.Keras主要保存為HDF5,Estimator保存為SavedModel,而Lagacy主要保存的是Checkpoint,并且可以通過freeze_graph,將模型變量凍結,得到Frozen GradhDef的文件。這三種格式的模型,都可以通過TFLite Converter導出為 .tflite 的模型文件,用于安卓/ios/嵌入式設備的serving。

在tensorflow 2.0中,推薦使用SavedModel進行模型的保存,所以keras默認導出格式是SavedModel,也可以通過顯性使用 .h5 后綴,使得保存的模型格式為HDF5 。 此外其他low level API,都支持導出為SavedModel格式,以及Concrete Functions。Concrete Function是一個簽名函數,有固定格式的輸入和輸出。 最終轉化成Flatbuffer,服務端運行結束。

checkpint 的導出是網絡結構和參數權重分開保存的。
其組成:

checkpoint # 列出該目錄下,保存的所有的checkpoint列表,下面有具體的例子
events.out.tfevents.1583930869.prod-cloudserver-gpu169 # tensorboad可視化所需文件,可以直觀看出模型的結構
'''
model.ckpt-13000表示前綴,代表第13000 global steps時的保存結果,我們在指定checkpoint加載時,也只需要說明前綴即可。
'''
model.ckpt-13000.index # 代表了參數名
model.ckpt-13000.data-00000-of-00001 # 代表了參數值
model.ckpt-13000.meta # 代表了網絡結構

所以一個checkpoint 組成是由兩個部分,三個文件組成,其中網絡結構部分(meta文件),以及參數部分(參數名:index,參數值:data)

其中checkpoint文件中

model_checkpoint_path: "model.ckpt-16329"
all_model_checkpoint_paths: "model.ckpt-13000"
all_model_checkpoint_paths: "model.ckpt-14000"
all_model_checkpoint_paths: "model.ckpt-15000"
all_model_checkpoint_paths: "model.ckpt-16000"
all_model_checkpoint_paths: "model.ckpt-16329"

使用tensorboard --logdir PATH_TO_CHECKPOINT: tensorboard 會調用events.out.tfevents.*
文件,并生成tensorboard,例如下圖

導出成CKPT

  • tensorflow 1.0
# in tensorflow 1.0
saver = tf.train.Saver()
saver.save(sess=session, save_path=args.save_path)
  • estimator
# estimator
"""
通過 RunConfig 配置多少時間或者多少個steps 保存一次模型,默認600s 保存一次。
具體參考 https://zhuanlan.zhihu.com/p/112062303
"""
run_config = tf.estimator.RunConfig(model_dir=FLAGS.output_dir, # 模型保存路徑session_config=config,save_checkpoints_steps=FLAGS.save_checkpoints_steps, # 多少steps保存一次ckptkeep_checkpoint_max=1)
estimator = tf.estimator.Estimator(model_fn=model_fn,config=run_config,params=None
)

關于estimator的介紹可以參考

https://zhuanlan.zhihu.com/p/112062303?zhuanlan.zhihu.com

加載CKPT

  • tf1.0
    ckpt加載的腳本如下,加載完后,session就會是保存的ckpt了。
# tf1.0
session = tf.Session()
session.run(tf.global_variables_initializer())
saver = tf.train.Saver()
saver.restore(sess=session, save_path=args.save_path)  # 讀取保存的模型
  • 對于estimator 會自動load output_dir 中的最新的ckpt。
  • 我們常用的model_file = tf.train.latest_checkpoint(FLAGS.output_dir) 獲取最新的ckpt

SavedModel

SavedModel 格式是tensorflow 2.0 推薦的格式,他很好地支持了tf-serving等部署,并且可以簡單被python,java等調用。

一個 SavedModel 包含了一個完整的 TensorFlow program, 包含了 weights 以及 計算圖 computation. 它不需要原本的模型代碼就可以加載所以很容易在 TFLite, TensorFlow.js, TensorFlow Serving, or TensorFlow Hub 上部署。

通常SavedModel由以下幾個部分組成

├── assets/ # 所需的外部文件,例如說初始化的詞匯表文件,一般無
├── assets.extra/ # TensorFlow graph 不需要的文件, 例如說給用戶知曉的如何使用SavedModel的信息. Tensorflow 不使用這個目錄下的文件。
├── saved_model.pb # 保存的是MetaGraph的網絡結構
├── variables # 參數權重,包含了所有模型的變量(tf.Variable objects)參數├── variables.data-00000-of-00001└── variables.index

導出為SavedModel

  • tf 1.0 方式
"""tf1.0"""
x = tf.placeholder(tf.float32, [None, 784], name="myInput")
y = tf.nn.softmax(tf.matmul(x, W) + b, name="myOutput")
tf.saved_model.simple_save(sess,export_dir,inputs={"myInput": x},outputs={"myOutput": y})

simple_save 是對于普通的tf 模型導出的最簡單的方式,只需要補充簡單的必要參數,有很多參數被省略,其中最重要的參數是tagtag 是用來區(qū)別不同的 MetaGraphDef,這是在加載模型所需要的參數。其默認值是tag_constants.SERVING (“serve”).
對于某些節(jié)點,如果沒有辦法直接加name,那么可以采用 tf.identity, 為節(jié)點加名字,例如說CRF的輸出,以及使用dataset后,無法直接加input的name,都可以采用這個方式:

def addNameToTensor(someTensor, theName):return tf.identity(someTensor, name=theName)
  • estimator 方式
"""estimator"""
def serving_input_fn():label_ids = tf.placeholder(tf.int32, [None], name='label_ids')input_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_ids')input_mask = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_mask')segment_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='segment_ids')input_fn = tf.estimator.export.build_raw_serving_input_receiver_fn({'label_ids': label_ids,'input_ids': input_ids,'input_mask': input_mask,'segment_ids': segment_ids,})return input_fnif do_export:estimator._export_to_tpu = Falseestimator.export_saved_model(Flags.export_dir, serving_input_fn)
  • 保存多個 MetaGraphDef's
import tensorflow.python.saved_model
from tensorflow.python.saved_model import tag_constants
from tensorflow.python.saved_model.signature_def_utils_impl import predict_signature_def
builder = saved_model.builder.SavedModelBuilder(export_path)signature = predict_signature_def(inputs={'myInput': x},outputs={'myOutput': y})
""" using custom tag instead of: tags=[tag_constants.SERVING] """
builder.add_meta_graph_and_variables(sess=sess,tags=["myTag"],signature_def_map={'predict': signature})
builder.save()
  • ckpt轉SavedModel
def get_saved_model(bert_config, num_labels, use_one_hot_embeddings):tf_config = tf.compat.v1.ConfigProto()tf_config.gpu_options.allow_growth = Truemodel_file = tf.train.latest_checkpoint(FLAGS.output_dir)with tf.Graph().as_default(), tf.Session(config=tf_config) as tf_sess:label_ids = tf.placeholder(tf.int32, [None], name='label_ids')input_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_ids')input_mask = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_mask')segment_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='segment_ids')loss, per_example_loss, probabilities, predictions = create_model(bert_config, False, input_ids, input_mask, segment_ids, label_ids,num_labels, use_one_hot_embeddings)saver = tf.train.Saver()print("restore;{}".format(model_file))saver.restore(tf_sess, model_file)tf.saved_model.simple_save(tf_sess,FLAGS.output_dir,inputs={'label_ids': label_ids,'input_ids': input_ids,'input_mask': input_mask,'segment_ids': segment_ids,},outputs={"probabilities": probabilities})
  • frozen graph to savedModel
import tensorflow as tf
from tensorflow.python.saved_model import signature_constants
from tensorflow.python.saved_model import tag_constantsexport_dir = 'inference/pb2saved'
graph_pb = 'inference/robert_tiny_clue/frozen_model.pb'builder = tf.saved_model.builder.SavedModelBuilder(export_dir)with tf.gfile.GFile(graph_pb, "rb") as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read())sigs = {}with tf.Session(graph=tf.Graph()) as sess:# name="" is important to ensure we don't get spurious prefixingtf.import_graph_def(graph_def, name="")g = tf.get_default_graph()input_ids = sess.graph.get_tensor_by_name("input_ids:0")input_mask = sess.graph.get_tensor_by_name("input_mask:0")segment_ids = sess.graph.get_tensor_by_name("segment_ids:0")probabilities = g.get_tensor_by_name("loss/pred_prob:0")sigs[signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY] = tf.saved_model.signature_def_utils.predict_signature_def({"input_ids": input_ids,"input_mask": input_mask,"segment_ids": segment_ids}, {"probabilities": probabilities})builder.add_meta_graph_and_variables(sess,[tag_constants.SERVING],signature_def_map=sigs)builder.save()
  • tf.keras 2.0
model.save('saved_model/my_model')  
"""saved as SavedModel by default"""

加載SavedModel

對于在java中加載SavedModel,我們首先需要知道我們模型輸入和輸出,可以通過以下的腳本在terminal中運行 saved_model_cli show --dir SavedModel路徑 --all 得到類似以下的結果

MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:signature_def['serving_default']:The given SavedModel SignatureDef contains the following input(s):inputs['input_ids'] tensor_info:dtype: DT_INT32shape: (-1, 128)name: input_ids:0inputs['input_mask'] tensor_info:dtype: DT_INT32shape: (-1, 128)name: input_mask:0inputs['label_ids'] tensor_info:dtype: DT_INT32shape: (-1)name: label_ids:0inputs['segment_ids'] tensor_info:dtype: DT_INT32shape: (-1, 128)name: segment_ids:0The given SavedModel SignatureDef contains the following output(s):outputs['probabilities'] tensor_info:dtype: DT_FLOATshape: (-1, 7)name: loss/pred_prob:0Method name is: tensorflow/serving/predict

首先我們可以看到有inputs,以及outputs,分別是一個key為string,value為tensor的字典,每個tensor都有各自的名字。

Python 加載

所有我們有常見兩種方式可以加載savedModel,一種是采用 tf.contrib.predictor.from_saved_model 傳入predictor模型的inputs dict,然后得到 outputs dict。 一種是直接類似tf1.0的方式,采用 tf.saved_model.loader.load, feed tensor然后fetch tensor。

  • 采用predictor
    采用predictor時, 需要傳入的字典名字用的是 inputs的key,而不是tensor的names
predict_fn = tf.contrib.predictor.from_saved_model(args_in_use.model)
prediction = predict_fn({"input_ids": [feature.input_ids],"input_mask": [feature.input_mask],"segment_ids": [feature.segment_ids],})
probabilities = prediction["probabilities"]
  • tf 1.0 采用 loader
    采用loader的方式是采用 session 的feed_dict 方式,該方式feed的是tenor的names,fetch的同樣也是tensor 的names。
    其中feed_dict的key 可以直接是tensor的name,或者是采用 sess.graph.get_tensor_by_name(TENSOR_NAME) 得到的tensor。
with tf.Session(graph=tf.Graph()) as sess:tf.saved_model.loader.load(sess, ["serve"], export_path)graph = tf.get_default_graph()feed_dict = {"input_ids_1:0": [feature.input_ids],"input_mask_1:0": [feature.input_mask],"segment_ids_1:0": [feature.segment_ids]}"""# alternative wayfeed_dict = {sess.graph.get_tensor_by_name("input_ids_1:0"): [feature.input_ids],sess.graph.get_tensor_by_name("input_mask_1:0"):[feature.input_mask],sess.graph.get_tensor_by_name("segment_ids_1:0"):[feature.segment_ids]}"""sess.run('loss/pred_prob:0',feed_dict=feed_dict
  • tf.keras 2.0
    new_model = tf.keras.models.load_model('saved_model/my_model')

JAVA 加載

注意 java加載的時候,如果遇到Op not defined 的錯誤,是需要匹配模型訓練python的tensorflow版本以及java的tensorflow版本的。

所以我們知道我們在tag-set 為serve的tag下,有4個inputs tensors,name分別為input_ids:0, input_mask:0, label_ids:0, segment_ids:0, 輸出為1個,name是 loss/pred_prob:0
并且我們知道這些tensor的類型。

所以我們可以通過下面的java代碼,進行加載,獲得結果。注意我們需要傳入的name中不需要傳入:0

import org.tensorflow.*
SavedModelBundle savedModelBundle = SavedModelBundle.load("./export_path", "serve");
Graph graph = savedModelBundle.graph();Tensor tensor = this.savedModelBundle.session().runner().feed("input_ids", inputIdTensor).feed("input_mask", inputMaskTensor).feed("segment_ids", inputSegmentTensor).fetch("loss/pred_prob").run().get(0);

CLI 加載

$ saved_model_cli show --dir export/1524906774 --tag_set serve --signature_def serving_default
The given SavedModel SignatureDef contains the following input(s):inputs['inputs'] tensor_info:dtype: DT_STRINGshape: (-1)
The given SavedModel SignatureDef contains the following output(s):outputs['classes'] tensor_info:dtype: DT_STRINGshape: (-1, 3)outputs['scores'] tensor_info:dtype: DT_FLOATshape: (-1, 3)
Method name is: tensorflow/serving/classify$ saved_model_cli run --dir export/1524906774 --tag_set serve --signature_def serving_default --input_examples 'inputs=[{"SepalLength":[5.1],"SepalWidth":[3.3],"PetalLength":[1.7],"PetalWidth":[0.5]}]'
Result for output key classes:
[[b'0' b'1' b'2']]
Result for output key scores:
[[9.9919027e-01 8.0969761e-04 1.2872645e-09]]

Frozen Graph

frozen Graphdef 將tensorflow導出的模型的權重都freeze住,使得其都變?yōu)槌A俊2⑶夷P蛥岛途W絡結構保存在同一個文件中,可以在python以及java中自由調用。

導出為pb

python

  • 采用session方式保存frozen graph
"""tf1.0"""
from tensorflow.python.framework.graph_util import convert_variables_to_constantsoutput_graph_def = convert_variables_to_constants(session,session.graph_def,output_node_names=['loss/pred_prob'])
tf.train.write_graph(output_graph_def, args.export_dir, args.model_name, as_text=False)
  • 采用ckpt 轉換成frozen graph
    以下采用bert tensorflow模型做演示
"""
NB:首先我們要在create_model() 函數中,為我們需要的輸出節(jié)點取個名字,比如說我們要: probabilities = tf.nn.softmax(logits, axis=-1, name='pred_prob')
""" def get_frozen_model(bert_config, num_labels, use_one_hot_embeddings):tf_config = tf.compat.v1.ConfigProto()tf_config.gpu_options.allow_growth = Trueoutput_node_names = ['loss/pred_prob']model_file = tf.train.latest_checkpoint(FLAGS.output_dir)with tf.Graph().as_default(), tf.Session(config=tf_config) as tf_sess: label_ids = tf.placeholder(tf.int32, [None], name='label_ids')input_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_ids')input_mask = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_mask')segment_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='segment_ids')create_model(bert_config, False, input_ids, input_mask, segment_ids, label_ids,num_labels, use_one_hot_embeddings)saver = tf.train.Saver()print("restore;{}".format(model_file))saver.restore(tf_sess, model_file)tmp_g = tf_sess.graph.as_graph_def()if FLAGS.use_opt:input_tensors = [input_ids, input_mask, segment_ids]dtypes = [n.dtype for n in input_tensors]print('optimize...')tmp_g = optimize_for_inference(tmp_g,[n.name[:-2] for n in input_tensors],output_node_names,[dtype.as_datatype_enum for dtype in dtypes],False)print('freeze...')frozen_graph = tf.graph_util.convert_variables_to_constants(tf_sess, tmp_g, output_node_names)out_graph_path = os.path.join(FLAGS.output_dir, "frozen_model.pb")with tf.io.gfile.GFile(out_graph_path, "wb") as f:f.write(frozen_graph.SerializeToString())      print(f'pb file saved in {out_graph_path}')
  • 采用savedModel 轉換成 frozen graph
from tensorflow.python.tools import freeze_graph
from tensorflow.python.saved_model import tag_constantsinput_saved_model_dir = "./1583934987/"
output_node_names = "loss/pred_prob"
input_binary = False
input_saver_def_path = False
restore_op_name = None
filename_tensor_name = None
clear_devices = False
input_meta_graph = False
checkpoint_path = None
input_graph_filename = None
saved_model_tags = tag_constants.SERVING
output_graph_filename='frozen_graph.pb'freeze_graph.freeze_graph(input_graph_filename,input_saver_def_path,input_binary,checkpoint_path,output_node_names,restore_op_name,filename_tensor_name,output_graph_filename,clear_devices,"", "", "",input_meta_graph,input_saved_model_dir,saved_model_tags)
  • HDF5 to pb
from keras import backend as Kdef freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):"""Freezes the state of a session into a pruned computation graph.Creates a new computation graph where variable nodes are replaced byconstants taking their current value in the session. The new graph will bepruned so subgraphs that are not necessary to compute the requestedoutputs are removed.@param session The TensorFlow session to be frozen.@param keep_var_names A list of variable names that should not be frozen,or None to freeze all the variables in the graph.@param output_names Names of the relevant graph outputs.@param clear_devices Remove the device directives from the graph for better portability.@return The frozen graph definition."""graph = session.graphwith graph.as_default():freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))output_names = output_names or []output_names += [v.op.name for v in tf.global_variables()]input_graph_def = graph.as_graph_def()if clear_devices:for node in input_graph_def.node:node.device = ""frozen_graph = tf.graph_util.convert_variables_to_constants(session, input_graph_def, output_names, freeze_var_names)return frozen_graphfrozen_graph = freeze_session(K.get_session(),output_names=[out.op.name for out in model.outputs])tf.train.write_graph(frozen_graph, "some_directory", "my_model.pb", as_text=False)

CLI轉換工具

以下的工具可以快速進行ckpt到pb的轉換,但是不能再原本的基礎上增加tensor 的名字。

freeze_graph --input_checkpoint model.ckpt-16329 --output_graph 0316_roberta.pb --output_node_names loss/pred_prob --checkpoint_version 1 --input_meta_graph model.ckpt-16329.meta --input_binary true

模型加載

獲取frozen graph 中節(jié)點名字的腳本如下,但是一般來說,我們的inputs都是我們定義好的placeholders。

import tensorflow as tfdef printTensors(pb_file):"""read pb into graph_def"""with tf.gfile.GFile(pb_file, "rb") as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read())"""import graph_def"""with tf.Graph().as_default() as graph:tf.import_graph_def(graph_def)"""print operations"""for op in graph.get_operations():print(op.name)printTensors("path-to-my-pbfile.pb")

得到類似如下的結果

import/input_ids:0
import/input_mask:0
import/segment_ids:0
...
import/loss/pred_prob:0

當我們知道我們要feed以及fetch的節(jié)點名稱之后,我們就可以通過python/java加載了。
跟savedModel一樣,對于某些節(jié)點,如果沒有辦法直接加name,那么可以采用 tf.identity, 為節(jié)點加名字,例如說CRF的輸出,以及使用dataset后,無法直接加input的name,都可以采用這個方式

def addNameToTensor(someTensor, theName):return tf.identity(someTensor, name=theName)

Python 加載

我們保存完frozen graph 模型后,假設我們的模型包含以下的tensors:

那么我們通過python加載的代碼如下, 采用的是session feed和fetch的方式。

with tf.Graph().as_default():output_graph_def = tf.GraphDef()"""load pb model"""with open(args_in_use.model, 'rb') as f:output_graph_def.ParseFromString(f.read())tf.import_graph_def(output_graph_def, name='') #name是必須的"""enter a text and predict"""with tf.Session() as sess:tf.global_variables_initializer().run()input_ids = sess.graph.get_tensor_by_name("input_ids:0")input_mask = sess.graph.get_tensor_by_name("input_mask:0")segment_ids = sess.graph.get_tensor_by_name("segment_ids:0")output = "loss/pred_prob:0"feed_dict = {input_ids: [feature.input_ids],input_mask: [feature.input_mask],segment_ids: [feature.segment_ids],}# 也可以直接使用# feed_dict = {#     "input_ids:0": [feature.input_ids],#     "input_mask:0": [feature.input_mask],#     "segment_ids:0": [feature.segment_ids],# }y_pred_cls = sess.run(output, feed_dict=feed_dict)

Java 加載

對于frozen graph,我們加載的方式和savedModel很類似,首先我們需要先啟動一個session,然后在啟動一個runner(),然后再feed模型的輸入,以及fetch模型的輸出。

注意 java加載的時候,如果遇到Op not defined 的錯誤,是需要匹配模型訓練python的tensorflow版本以及java的tensorflow版本的。

// TensorUtil.class
public static Session generateSession(String modelPath) throws IOException {Preconditions.checkNotNull(modelPath);byte[] graphDef = ByteStreams.toByteArray(TensorUtil.class.getResourceAsStream(modelPath));LOGGER.info("Graph Def Length: {}", graphDef.length);Graph graph = new Graph();graph.importGraphDef(graphDef);return new Session(graph);
}// model.class
this.session = TensorUtil.generateSession(modelPath);Tensor tensor = this.session.runner().feed("input_ids", inputIdTensor).feed("input_mask", inputMaskTensor).feed("segment_ids", inputSegmentTensor).fetch("loss/pred_prob").run().get(0);

HDF5

HDF5 是keras or tf.keras 特有的存儲格式。

HDF5導出

  • 導出整個模型
"""默認1.0 是HDF5,但是2.0中,是SavedModel,所以需要顯性地指定`.h5`后綴"""
model.save('my_model.h5') 
  • 導出模型weights
"""keras 1.0"""
model.save_weights('my_model_weights.h5')

HDF5加載

  • 加載整個模型(無自定義部分)
    • keras1.0
"""keras 1.0"""
from keras.models import load_model
model = load_model(model_path)
    • keras2.0
"""keras 2.0"""
new_model = tf.keras.models.load_model('my_model.h5')
  • 加載整個模型(含自定義部分)
    對于有自定義layers的或者實現(xiàn)的模型加載,需要增加dependencies 的映射字典,例如下面的例子:
    • keras1.0
dependencies = {'MyLayer': MyLayer(), 'auc': auc, 'log_loss': log_loss}
model = load_model(model_path, custom_objects=dependencies, compile=False)
    • keras 2.0
"""
To save custom objects to HDF5, you must do the following:1. Define a get_config method in your object, and optionally a from_config classmethod.
get_config(self) returns a JSON-serializable dictionary of parameters needed to recreate the object.
from_config(cls, config) uses the returned config from get_config to create a new object. By default, this function will use the config as initialization kwargs (return cls(**config)).2. Pass the object to the custom_objects argument when loading the model. The argument must be a dictionary mapping the string class name to the Python class. E.g. tf.keras.models.load_model(path, custom_objects={'CustomLayer': CustomLayer})
"""
  • 加載模型權重
    假設你有了相同的模型構建了,那么直接運行下面的代碼,加載模型
model.load_weights('my_model_weights.h5')

如果你想要做transfer learning,即從其他的已保存的模型中加載部分的模型參數權重,自己目前的模型結構與保存的模型不同,可以通過參數的名字進行加載,加上 by_name=True

model.load_weights('my_model_weights.h5', by_name=True)

tfLite

TFlite轉換

  • savedModel to TFLite
"""
--saved_model_dir:  Type: string. Specifies the full path to the directory containing the SavedModel generated in 1.X or 2.X.
--output_file: Type: string. Specifies the full path of the output file.
"""
tflite_convert --saved_model_dir=1583934987 --output_file=rbt.tflite
  • frozen graph to TFLite
tflite_convert --graph_def_file albert_tiny_zh.pb --input_arrays 'input_ids,input_masks,segment_ids' --output_arrays 'finetune_mrc/add, finetune_mrc/add_1'--input_shapes 1,512:1,512:1,512 --output_file saved_model.tflite --enable_v1_converter --experimental_new_converter
  • HDF5 to TFLite
#--keras_model_file. Type: string. Specifies the full path of the HDF5 file containing the tf.keras model generated in 1.X or 2.X.   
#--output_file: Type: string. Specifies the full path of the output file.
tflite_convert --keras_model_file=h5_dir/ --output_file=rbt.tflite

TFLite 加載

參考 https://www.tensorflow.org/lite/guide/inference
參考 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/r1/convert/index.md

ref

  • https://zhuanlan.zhihu.com/p/64099452
  • https://zhuanlan.zhihu.com/p/60064947
  • https://zhuanlan.zhihu.com/p/60069860
  • https://medium.com/@jsflo.dev/saving-and-loading-a-tensorflow-model-using-the-savedmodel-api-17645576527
  • https://stackoverflow.com/questions/44329185/convert-a-graph-proto-pb-pbtxt-to-a-savedmodel-for-use-in-tensorflow-serving-o/44329200#44329200
  • https://stackoverflow.com/questions/47029048/tensorflow-how-to-freeze-a-pb-from-the-savedmodel-to-be-used-for-inference-in
  • https://zhuanlan.zhihu.com/p/64099452
  • https://stackoverflow.com/questions/59263406/how-to-find-operation-names-in-tensorflow-graph
  • http://shzhangji.com/cnblogs/2018/05/14/serve-tensorflow-estimator-with-savedmodel/?utm_source=wechat_session&utm_medium=social&utm_oi=613327238821842944&from=singlemessage&isappinstalled=0
  • http://shzhangji.com/cnblogs/2018/05/14/serve-tensorflow-estimator-with-savedmodel/?utm_source=wechat_session&utm_medium=social&utm_oi=613327238821842944&from=singlemessage&isappinstalled=0
  • https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/r1/convert/index.md

總結

以上是生活随笔為你收集整理的java导出mpp格式_tensorflow 模型导出总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久字幕 | 六月天综合网 | 成 人 黄 色 视频 免费观看 | 欧亚日韩精品一区二区在线 | 激情丁香在线 | 在线免费黄色 | 国产精品成人免费一区久久羞羞 | 久久一久久 | 天天干亚洲 | 久草久草在线 | 国产精品乱码一区二三区 | 国产精品高潮呻吟久久av无 | 超碰97成人 | 亚洲国产美女久久久久 | 色婷婷综合在线 | 亚洲一二三久久 | 女人18毛片a级毛片一区二区 | 欧美日韩国产页 | 天无日天天操天天干 | 视频国产一区二区三区 | 五月情婷婷 | 国产在线观看黄 | 国产精品久久久久久久免费 | 久久国产区 | 久久免费成人网 | 日本韩国精品在线 | 亚洲日本韩国一区二区 | 九九九免费视频 | 日韩美女黄色片 | 久久国产视频网站 | 一区二区电影网 | 国产精品久久久久久超碰 | 丰满少妇对白在线偷拍 | 免费影视大全推荐 | 99爱精品在线 | av免费看电影 | 亚洲视频每日更新 | 亚洲欧美精品一区 | 亚洲影视九九影院在线观看 | 久久久久久久久久网 | 亚洲视频电影在线 | 久久视频99| 国产一区二区网址 | 日本xxxx裸体xxxx17 | 国产91精品一区二区麻豆亚洲 | 中文字幕91视频 | 亚洲黄色一级电影 | 九九久久成人 | 久久桃花网 | 亚洲欧美综合精品久久成人 | 久久躁日日躁aaaaxxxx | 日韩在线免费 | 日本精品久久久一区二区三区 | 国产精品久久久久久久久久久杏吧 | 亚洲欧美日韩在线一区二区 | 中文字幕国产视频 | 天天躁天天狠天天透 | 国产一二区精品 | 精品一区二区免费视频 | 久久99热这里只有精品国产 | 精品国产成人av | 99久久综合国产精品二区 | 91手机视频在线 | 欧美日韩另类在线 | 久久久久久蜜桃一区二区 | 天天狠狠干 | 国产亚洲精品日韩在线tv黄 | 欧美亚洲另类在线视频 | 99爱视频在线观看 | 久久久久亚洲国产精品 | 高清在线观看av | 亚洲手机av| av高清免费在线 | 国产精品免费观看国产网曝瓜 | adc在线观看 | 成人一区在线观看 | 亚洲视频免费 | 国产午夜精品av一区二区 | 国产第页 | 黄色日本免费 | 天天在线视频色 | 国产中文字幕在线免费观看 | 成人91在线 | 国产亚洲欧美精品久久久久久 | 国产亚洲人 | 麻豆你懂的 | 在线高清 | 欧美日韩精品在线视频 | 丁香花五月 | 干狠狠| 99久久99久久免费精品蜜臀 | 欧美一二三视频 | 永久精品视频 | 精品国产一区二区三区不卡 | 天天干天天插 | 黄色电影网站在线观看 | 国产中文字幕视频在线 | 国产免费高清 | 国产亚洲精品久久久久久久久久久久 | 超碰97在线资源站 | 丁香视频全集免费观看 | 在线国产视频一区 | 中文字幕区 | 亚洲精品av在线 | 成年人天堂com | 国产视频97 | 国产亚洲无 | 欧美成人va| 国产亚洲精品久久久久久久久久久久 | www91在线观看 | 国产丝袜网站 | 最近中文字幕免费视频 | 91九色视频导航 | 精品a级片 | 国产精品尤物视频 | 久久综合国产伦精品免费 | 久久国精品 | 高清不卡免费视频 | 精品久久久久国产免费第一页 | 黄色.com| 国产精品区在线观看 | 精品一区二区免费在线观看 | 亚洲最大成人免费网站 | 高潮久久久久久 | 国产精品免费人成网站 | 亚州av成人 | 欧美日韩观看 | 久久综合影院 | 91手机视频 | 日韩中文字幕亚洲一区二区va在线 | 亚洲国产高清在线 | 亚洲人毛片 | 国产欧美日韩视频 | 日韩av三区 | 日韩精品一区二区免费视频 | 国产精品一区二区久久精品爱微奶 | 亚洲狠狠干 | 九九视频网站 | 国产一级精品绿帽视频 | 日韩欧美视频一区二区三区 | 夜夜操网 | 亚洲五月婷 | 精品国产精品国产偷麻豆 | 激情网站五月天 | 亚洲国产精久久久久久久 | 精品国产aⅴ一区二区三区 在线直播av | 在线观看黄色av | 天堂网中文在线 | 在线观看涩涩 | 国内成人精品视频 | 国产在线国偷精品产拍 | 国产成人精品电影久久久 | 91亚洲在线观看 | 亚洲精品视频一二三 | 激情网五月 | 久久激情小说 | 国产一及片| 99在线视频观看 | 91最新在线观看 | 91成人精品 | 99精品免费在线观看 | 国产丝袜网站 | 天天曰夜夜操 | 国产成人性色生活片 | 91正在播放 | 五月婷婷电影网 | 国产精品免费久久 | 激情久久久 | 91av电影在线观看 | 亚洲国产网址 | 久久精品亚洲一区二区三区观看模式 | 久久久九色精品国产一区二区三区 | 久久九精品 | 黄色的视频网站 | 91私密视频| 最新av在线网站 | 国产精品美女久久久久久免费 | 青青草在久久免费久久免费 | 激情五月色播五月 | 免费看网站在线 | 国产日产在线观看 | 国产一区二区在线免费播放 | 久久在线视频在线 | 27xxoo无遮挡动态视频 | 97国产精品久久 | 日本精品久久久久中文字幕 | 日日摸日日爽 | 丁香六月国产 | 国产精品 9999 | 久久精品网址 | 91精选 | 最新av网址在线 | 午夜久久网 | 久久天堂影院 | 欧美一级片免费在线观看 | 日韩中文在线观看 | 干av在线 | 日韩精品第一区 | 久久精品牌麻豆国产大山 | 日韩av中文字幕在线 | 欧美日韩一区三区 | 免费大片黄在线 | 婷婷丁香七月 | 91精品办公室少妇高潮对白 | 久久久91精品国产一区二区三区 | 国产日女人 | 久草在线久草在线2 | 人人爽人人爽人人片av免 | 97超碰在线久草超碰在线观看 | 欧美精品生活片 | 五月开心六月伊人色婷婷 | 国产区在线看 | 91精品一区二区三区蜜桃 | 日韩大陆欧美高清视频区 | www.五月天 | 91av视屏| 免费看成年人 | 少妇bbbb搡bbbb桶 | 黄色成人av在线 | 丝袜精品视频 | 日韩精品高清不卡 | 特级xxxxx欧美 | 99国产在线视频 | 亚洲国产欧美在线人成大黄瓜 | 国内精品久久久久久久久 | 成人久久久久久久久久 | 亚洲精品乱码久久久久久按摩 | 国产在线综合视频 | 婷婷久久精品 | 天天操 夜夜操 | 日本大片免费观看在线 | 国产一二三区av | 久久情爱| 福利区在线观看 | 久久理伦片 | 人人搞人人搞 | 亚洲欧美999| 国产精品精品久久久久久 | 日韩欧美视频在线免费观看 | 国内精品视频在线播放 | 久久久久这里只有精品 | 国产精品一区二区在线 | 丁香 婷婷 激情 | 日韩欧美高清视频在线观看 | 久久99影院| 91精品老司机久久一区啪 | 999电影免费在线观看2020 | 国产午夜免费视频 | 国产成人在线播放 | 成人av直播| 免费av福利 | 国产三级在线播放 | 久久精品一区 | 久久久精品国产一区二区 | 99久久er热在这里只有精品66 | 黄色免费大全 | 手机看国产毛片 | 97超碰成人在线 | 国产97色| 色91在线视频 | 黄网在线免费观看 | 91tv国产成人福利 | 午夜av一区二区三区 | 成人av高清在线 | 深爱婷婷激情 | av黄色免费在线观看 | 久久视频在线看 | 日本大尺码专区mv | 国产高清av在线播放 | www.国产在线视频 | 欧美日韩不卡一区二区 | 国产青草视频在线观看 | 国产九九九视频 | 国产高清中文字幕 | 色婷婷综合久久久久中文字幕1 | 免费精品在线 | 伊人狠狠色丁香婷婷综合 | 久久九九影院 | 免费的黄色av | 亚洲最大成人免费网站 | 久久久久久久99 | 精品专区 | 91视频观看免费 | 超碰在线免费97 | 国产99久久久欧美黑人 | 亚洲欧美少妇 | 亚洲精品网站 | 日韩免费成人 | 日韩美精品视频 | 国产精品久久一区二区无卡 | 日本中文字幕网 | 国产免费国产 | 一区二区不卡视频在线观看 | 不卡中文字幕av | 丁香激情婷婷 | 久久超碰97 | 国产免费久久av | 五月天精品视频 | 久久精品99国产精品亚洲最刺激 | 在线国产激情视频 | 69国产精品成人在线播放 | 日本中文字幕视频 | 性色av香蕉一区二区 | 日日夜夜艹 | 国产首页 | 国产精品欧美一区二区 | av再线观看 | 国产精品久久久久久久久久 | 国产精品va在线播放 | 97视频免费观看 | 少妇性bbb搡bbb爽爽爽欧美 | 中文字幕在线视频一区二区 | 久久久.com| 国产特黄色片 | 国产亚洲成人精品 | 激情五月婷婷激情 | 成人午夜精品久久久久久久3d | 亚洲永久在线 | 国产成人在线网站 | 国产精品爽爽久久久久久蜜臀 | 国产又粗又猛又黄视频 | 精品在线观看一区二区三区 | 成人一区二区三区在线观看 | 96精品高清视频在线观看软件特色 | 精品视频免费在线 | 亚洲欧美在线视频免费 | 中文字幕亚洲综合久久五月天色无吗'' | 美女国产网站 | 欧美aa级 | 国产香蕉97碰碰久久人人 | 亚洲成av人片在线观看www | 亚洲精品在线观看中文字幕 | 色播亚洲婷婷 | 国产这里只有精品 | 免费观看一级一片 | 夜添久久精品亚洲国产精品 | 91观看视频| 一区二区视频电影在线观看 | 日韩在线网 | 91看片看淫黄大片 | 精品视频网站 | 日日婷婷夜日日天干 | 国产123区在线观看 国产精品麻豆91 | 在线网址你懂得 | 国产盗摄精品一区二区 | 欧美日韩高清在线一区 | 欧美日韩高清在线观看 | 国产精品24小时在线观看 | 青青草久草在线 | 五月开心婷婷 | 久久免费播放视频 | 怡红院成人在线 | 91视频在线免费看 | 欧美日韩亚洲国产一区 | 色综合天天综合在线视频 | 91九色视频国产 | 能在线观看的日韩av | 五月婷婷黄色网 | 日韩av电影免费观看 | 午夜久久久久久久 | 少妇视频一区 | 欧美日韩不卡一区 | 久久久久国产a免费观看rela | 亚洲精品动漫在线 | 亚洲精品视频第一页 | 91精品国产乱码 | 人人澡澡人人 | 国产成人av网站 | 国产色秀视频 | 91麻豆国产福利在线观看 | 久久不卡免费视频 | 九九九国产 | 夜夜骑首页 | 中文字幕在线观看完整版 | 欧美日韩二区在线 | 中文在线www | 久久精品亚洲精品国产欧美 | 成年人免费在线播放 | 色操插| 免费看污在线观看 | 日韩,精品电影 | 久久视频国产精品免费视频在线 | 成 人 黄 色 视频播放1 | 福利一区在线 | 婷婷伊人五月 | 日本久久久精品视频 | 91av在线免费播放 | 成人中文字幕av | 99久久精品国产欧美主题曲 | 天天天操天天天干 | 天天插天天爱 | 国产精品视频免费看 | 香蕉在线播放 | 美女在线观看av | 香蕉久草在线 | 九九久久在线看 | 又黄又爽又色无遮挡免费 | www.色五月.com | 中文字幕一区二区三区四区视频 | 九月婷婷人人澡人人添人人爽 | 欧美人交a欧美精品 | 国产成人免费观看久久久 | 综合久久精品 | 香蕉视频在线免费看 | 香蕉精品视频在线观看 | 婷婷久久丁香 | aⅴ视频在线 | 国产一区二区视频在线播放 | 国产精品色 | 国产免费高清视频 | 国产区精品 | 国产精品久一 | 国产精品麻豆91 | 69夜色精品国产69乱 | 国产精品白虎 | 免费一级片久久 | www.黄色小说.com | 亚洲一级黄色 | 香蕉视频91| 日韩大片免费在线观看 | 国产美女无遮挡永久免费 | av天天干 | 亚洲福利精品 | 婷婷丁香花| 五月婷婷六月丁香在线观看 | 国产a级免费 | 欧美在线1| 91久久精品一区二区三区 | 免费看在线看www777 | 久久免费毛片视频 | 麻豆国产网站入口 | 日日躁夜夜躁xxxxaaaa | 天天射天天操天天干 | а天堂中文最新一区二区三区 | 亚洲精品午夜久久久久久久久久久 | 国产精品成人久久久久 | 毛片网在线播放 | 久久一区二区免费视频 | 国产精品精| 中文字幕文字幕一区二区 | 日韩av一区在线观看 | 亚洲激情一区二区三区 | 97国产大学生情侣白嫩酒店 | av天天色| 香蕉免费| 久99久在线视频 | 一区二区三区中文字幕在线 | 丁香五月亚洲综合在线 | 午夜视频亚洲 | 青青河边草免费直播 | 日韩一区二区免费播放 | 久久一区二区三区四区 | 黄色av电影网 | 日韩视频免费观看高清完整版在线 | 久久9999久久| 草免费视频 | 亚洲国产99 | 69国产精品成人在线播放 | 亚洲免费公开视频 | 国产成人精品久久久久蜜臀 | 人人射人人射 | 91成人破解版 | 天天干,夜夜操 | 国产精品嫩草影院9 | 在线播放 日韩专区 | 日韩精品中文字幕有码 | 天天射天 | 久久综合激情 | 成人国产精品电影 | 免费高清在线视频一区· | 日日干精品 | 日韩二区在线观看 | 粉嫩一二三区 | 国产黄色看片 | 亚洲 欧洲av | 成年人视频在线观看免费 | 91在线视频观看 | 在线中文字母电影观看 | 人人添人人澡人人澡人人人爽 | 91精品国产自产91精品 | 国产淫a| 青青草国产精品视频 | 黄色影院在线免费观看 | 国产91综合一区在线观看 | 免费裸体视频网 | 草久在线播放 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | av免费看在线 | 成人动漫精品一区二区 | 成人av高清在线 | 超碰97国产在线 | 丁香av | 国产成人一区二区三区在线观看 | 亚洲五月激情 | 久久久久免费视频 | 国产亚洲人 | 久久精彩免费视频 | 久久资源总站 | 免费看一级特黄a大片 | 精品国产1区2区 | 中文字幕欧美日韩va免费视频 | 在线播放日韩av | 五月婷婷狠狠 | 九九视频这里只有精品 | 91亚洲成人 | 久久精品伊人 | 精品不卡av | 久久一及片 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 不卡国产视频 | 国产亚洲免费观看 | 日韩欧美网址 | 日韩在线免费高清视频 | 国产传媒中文字幕 | 免费看国产视频 | 在线观看国产日韩欧美 | 九九九九热精品免费视频点播观看 | 久久久在线观看 | 久久91网 | 久久观看最新视频 | 欧美吞精 | 日韩久久久久久久久 | 五月天狠狠操 | 国产97碰免费视频 | 国产精品男女啪啪 | 69视频在线| 久久人人爽人人 | 国产精品不卡在线观看 | 中文字幕久久精品 | 久久久午夜精品理论片中文字幕 | 国产精品一区二区三区观看 | 日韩在线观看视频网站 | 国产精品久久人 | 粉嫩一二三区 | 免费人成网 | av免费在线看网站 | 久久精品视频国产 | 国产亚洲精品久久久久久久久久久久 | 九九热精品视频在线播放 | 欧美日韩久久一区 | 99re在线视频观看 | 亚洲免费成人 | 六月婷色| 99免在线观看免费视频高清 | 亚洲日b视频 | av免费线看 | 国产一级性生活视频 | 国产日产av | 狠狠的操狠狠的干 | 国产资源在线视频 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 国产高清第一页 | 干干操操| 中文字幕视频 | 久久久精品影视 | 国产专区在线 | 激情视频综合网 | 国产精品k频道 | av福利网址导航 | 91视频 - 88av | 精品91 | 成人午夜电影在线 | 久久久久久久久黄色 | 97偷拍视频| 91精品久久久久 | 精品久久久免费 | 日产乱码一二三区别在线 | 久久久久久免费网 | 国产精品网红直播 | 成人久久毛片 | av在线最新 | 中文字幕一区二区三区四区 | 亚洲视频 中文字幕 | 丁香五月缴情综合网 | 国产 欧美 在线 | 午夜精品剧场 | 日本精品视频在线观看 | 国产精品一区二区久久 | 天天曰| 中国一级片在线播放 | 中文字幕在线观看91 | 亚洲精品国产综合99久久夜夜嗨 | 久久久噜噜噜久久久 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 日韩区视频 | 国产日韩三级 | 欧美热久久 | 国产第一页精品 | 国语久久 | 国产精品 中文字幕 亚洲 欧美 | 少妇bbw搡bbbb搡bbbb | 成人h在线播放 | 伊人国产在线播放 | 亚洲精品88欧美一区二区 | www免费网站在线观看 | 日日碰狠狠躁久久躁综合网 | 久久99精品国产99久久 | 亚洲成av | 在线国产中文字幕 | 亚洲欧洲精品一区二区 | 日韩一区二区三区在线观看 | 欧美日韩国产综合网 | 91免费高清观看 | 成人a毛片| 欧美日在线观看 | 午夜精品福利影院 | 在线播放亚洲 | 97网在线观看 | 日韩精品在线看 | 国产精品99久久久久久有的能看 | 私人av| 国产丝袜网站 | 久久深夜福利免费观看 | 99久免费精品视频在线观看 | 色综合久久中文字幕综合网 | 亚洲精品在线网站 | 国产专区一 | 亚洲成a人片77777潘金莲 | www.香蕉视频在线观看 | 色婷婷久久久 | 国产成人精品久久久久蜜臀 | 亚欧日韩成人h片 | 五月婷婷丁香激情 | 91久久国产综合精品女同国语 | 国产精品国产三级国产aⅴ9色 | 久久精品看片 | 在线免费观看国产视频 | 国产精品不卡av | 九九免费在线观看 | 日本在线视频一区二区三区 | 天天操天天玩 | 草久视频在线 | 天天操夜夜操夜夜操 | 国产精品久久电影网 | 免费av试看 | 狠狠色狠狠色 | 91九色视频观看 | 国产一区二区三区高清播放 | 中文字幕一区二区三区精华液 | 欧美日韩免费一区 | 91精品黄色 | 欧美色综合久久 | 在线播放av网址 | 中文字幕网站 | 日韩影视在线 | 九九激情视频 | 久久久精品视频成人 | 夜添久久精品亚洲国产精品 | 狠狠色丁香婷婷综合久小说久 | 久久久这里有精品 | 中文字幕亚洲五码 | 亚洲精品电影在线 | 日日婷婷夜日日天干 | 国产精品久久久久久久久久久免费 | 中文字幕文字幕一区二区 | 毛片永久免费 | www.国产高清| 久久久久97国产 | 国产精品小视频网站 | a黄色 | 国产1区在线观看 | 日韩黄色免费看 | 精品一区二区免费在线观看 | 久久久精品免费观看 | 国产精品久久久久久久久久妇女 | 日本亚洲国产 | 新版资源中文在线观看 | 亚洲干 | 午夜av电影院 | 99视频精品| av免费网站在线观看 | 国产精品久久久久aaaa | 97在线影院 | 日韩电影中文,亚洲精品乱码 | 9在线观看免费 | 五月婷婷在线视频 | 午夜性生活片 | 国产精品影音先锋 | 综合久久久久久久 | 日韩欧美综合在线视频 | 日韩av资源在线观看 | 亚洲视频免费在线看 | 制服丝袜成人在线 | 亚洲 综合 国产 精品 | 国语精品免费视频 | 狠狠狠狠干 | 高清不卡毛片 | 久久精品久久99精品久久 | 黄色在线看网站 | 99久久精品久久久久久动态片 | 青青草国产在线 | 久久久国产精品亚洲一区 | 中文字幕亚洲精品日韩 | 美女啪啪图片 | 国产视频精品免费 | 天天碰天天操视频 | 久草在线一免费新视频 | 欧美疯狂性受xxxxx另类 | 国产在线观看免费观看 | 黄色免费国产 | 久久精品理论 | 亚洲国产免费网站 | 黄色a级片在线观看 | 亚洲激情影院 | 97av在线视频 | 免费视频你懂得 | 色综合五月 | 久久综合桃花 | 国产精品18毛片一区二区 | 日韩69av | 国产精品美女网站 | 夜夜婷婷 | 久久精品国产第一区二区三区 | 精品久久一级片 | 亚洲精品网站 | 欧美激情综合色 | www.久久久.com | 亚洲欧洲国产日韩精品 | 天天看天天操 | 中文字幕在线高清 | 亚洲黄色一级大片 | 欧美成人亚洲成人 | 国产精品一区二区av日韩在线 | 日日夜夜综合 | 黄色电影小说 | 久久99久| 伊人色综合久久天天 | 热久久视久久精品18亚洲精品 | 欧美日韩在线播放 | 一区二区精品在线观看 | 婷婷播播网| 国产精品专区在线观看 | 我爱av激情网 | 成人中文字幕在线观看 | 精品国产一区二区三区久久久久久 | 中文字幕亚洲欧美日韩 | 国产视频91在线 | 婷婷丁香av | 亚洲影音先锋 | 深夜国产福利 | 欧美午夜精品久久久久久浪潮 | 超碰在线观看99 | 99久久99久国产黄毛片 | 精品国产欧美 | 99视频一区 | 激情丁香 | 日本精品视频在线观看 | 一区二区三区免费在线观看 | 国产一二三四在线视频 | 色欧美综合 | 超碰97成人 | 亚洲精品在线视频观看 | 亚洲天堂网站视频 | 亚洲一区二区三区在线看 | 午夜久久视频 | 色婷婷综合久久久中文字幕 | 天天综合婷婷 | 九九在线视频 | 国产一区二区观看 | 在线一二三区 | 国产91成人 | 午夜精品久久久久久中宇69 | 久久九九国产精品 | 亚洲专区在线播放 | 日韩免费不卡av | 欧美午夜精品久久久久久浪潮 | 午夜视频欧美 | 6080yy精品一区二区三区 | 亚洲a网 | 久久久午夜精品福利内容 | 最近中文字幕大全中文字幕免费 | 日本免费久久高清视频 | 久久黄色片子 | 美女免费黄视频网站 | 在线观看成人小视频 | 亚洲区二区 | 五月天婷亚洲天综合网鲁鲁鲁 | 久草青青在线观看 | 在线观看亚洲国产 | 伊甸园av在线 | 日韩高清一区二区 | 99国产精品久久久久久久久久 | 日日干天天| 九九视频一区 | 国产一区二区在线看 | 亚洲精品在线一区二区三区 | 操操操天天操 | 日韩网站在线观看 | 夜夜操天天干, | 中文字幕在线乱 | 人人爱爱人人 | 久久久久久久精 | 蜜臀久久99精品久久久无需会员 | 亚洲一区二区高潮无套美女 | 在线有码中文字幕 | 成人禁用看黄a在线 | 国产精品99久久久久久武松影视 | 国产午夜三级一二三区 | 国产精品久久久一区二区 | 在线观看一区二区精品 | av天天澡天天爽天天av | 女人18毛片a级毛片一区二区 | 99久久精品无免国产免费 | 国产一区二区午夜 | 狠狠狠色| 久久久久久久久久久黄色 | 欧美久久久久 | 超碰免费97| 久久久久久久久久久久av | 亚洲成人免费在线 | 精品国产区在线 | 国产精品a成v人在线播放 | 久草在线免费电影 | 国产日本在线观看 | 免费福利小视频 | 国产热re99久久6国产精品 | 97精品超碰一区二区三区 | 午夜12点 | 久久综合久久八八 | 精品免费视频123区 午夜久久成人 | 91夫妻自拍 | 美女网站视频免费黄 | 日韩在线观看小视频 | 网站在线观看你们懂的 | 91理论片午午伦夜理片久久 | 婷婷激情小说网 | 久久久久久久久久免费视频 | 亚洲一区日韩在线 | 日韩欧美在线综合网 | 一级免费看 | 免费视频一二三 | 久久久高清视频 | 五月婷婷视频在线 | 久久黄色影视 | 国产精品激情偷乱一区二区∴ | 亚洲免费观看在线视频 | 中文网丁香综合网 | 久久国产精品一二三区 | 国产婷婷精品 | 97av视频在线观看 | 久久精品综合视频 | 久久亚洲福利视频 | 激情开心色 | 日韩在线观看不卡 | 久久久久久久毛片 | 天天草天天色 | 精品国产乱码久久久久久1区二区 | 亚洲精品国产第一综合99久久 | 99久久精品无码一区二区毛片 | 久久精品国产免费看久久精品 | 999热线在线观看 | 欧美精品亚洲精品 | 日韩特黄一级欧美毛片特黄 | 国产精品免费在线 | 色婷婷久久久综合中文字幕 | 亚洲专区欧美专区 | 狠狠综合| 亚洲伦理中文字幕 | 亚洲视频大全 | 国产精品完整版 | 黄色网免费 | 91大神dom调教在线观看 | 久久久久久久久久久网站 | 激情视频免费在线 | 欧美精品在线观看 | 91社区国产高清 | 久久激情小视频 | 中文字幕精品一区二区精品 | 久久精品一区二区国产 | 久久人人插 | 丁香导航 | 亚洲另类xxxx | 国产成人一区二 | 免费看一及片 | 在线观看色视频 | 麻豆va一区二区三区久久浪 | 久久99久久99久久 | 亚洲国产精品人久久电影 | 操综合 | 日韩精品中文字幕在线播放 | av色图天堂网 | 美女视频黄在线 | 91av手机在线观看 | 美女久久网站 | 亚洲精品国产拍在线 | 91视频在线免费看 | 久久dvd | 91视频麻豆视频 | 一区二区免费不卡在线 | 日韩视频一区二区在线观看 | 人成电影网| 亚洲成av片人久久久 | 欧美日韩伦理一区 | 六月激情婷婷 | www91在线| 91久久一区二区 | 99激情网| 黄色一区三区 | 黄色片网站大全 | 夜夜狠狠 | 美州a亚洲一视本频v色道 | 天天操夜夜操天天射 | 福利视频一区二区 | www.天堂av | 欧美日韩久久久 | 在线观看va | 久久国产精品一区二区三区 | 97视频免费看 | 精品国产诱惑 | 又黄又爽又刺激 | 麻豆国产网站入口 | 97视频精品 | 国产a国产 | 天天干天天做天天爱 | 久久av中文字幕片 | 免费人做人爱www的视 | 免费国产ww | 亚洲免费一级电影 | 成人免费观看视频大全 | 国产精品中文字幕在线播放 | 日本在线观看视频一区 | 欧美精品乱码99久久影院 | 久久国产精品精品国产色婷婷 | 91成人精品视频 | 日韩av二区 | 国产.精品.日韩.另类.中文.在线.播放 | 美女网站黄免费 | 成人性生交大片免费观看网站 | 99久久99久久精品 | 久青草视频| 国产999精品久久久久久麻豆 | 五月婷婷另类国产 | 狠狠天天 | 色片网站在线观看 | 国产精品av一区二区 | 99精品影视 | 久草在线电影网 | 久久久黄视频 | 国产免费国产 | 国产免费成人av | 欧美成人h版在线观看 | 又黄又爽又色无遮挡免费 | 成年人视频在线免费播放 | 中文字幕精品一区 | 视频1区2区 | 操久久免费视频 | 久久国内视频 | 亚洲国产精品久久久久 | 麻豆视频91 | 久久精品国产免费观看 | 日韩av免费一区二区 | 日韩精品欧美视频 | 午夜精品久久久久久久99热影院 | 色综合久久五月天 | 99色视频在线 | 久久综合九色综合欧美狠狠 | 久久久免费观看完整版 | 91九色成人蝌蚪首页 | av 一区二区三区 | h网站免费在线观看 | 久久av电影 | 日韩在线观看网址 | 91九色视频国产 | 久久久精品福利视频 | 日韩欧美v| 国产婷婷久久 | 久久中文视频 | 久久精视频 | 97国产超碰 | 久久午夜精品视频 | 97超碰超碰久久福利超碰 | 天天插天天狠天天透 | 福利在线看片 | 精品久久一区二区三区 | 久久久久人人 | 成人免费视频观看 | 国产一区二区在线影院 | 久久五月情影视 | 玖玖爱免费视频 | 亚洲视频资源在线 | 中文字幕在线看视频国产中文版 | 超级碰视频| 精品在线亚洲视频 | 欧美性大战久久久久 | 99精品在线免费视频 | 亚州国产精品 | 国产精品久久久久高潮 | 在线观看片 | 日韩欧美成人网 | 91在线播放视频 | 天天草综合网 | 四虎国产精品成人免费影视 | 亚洲成aⅴ人片久久青草影院 | 国产精品观看在线亚洲人成网 | 99在线视频网站 | 欧美污污视频 | 久久9999久久 | 精品视频免费 |