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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

莫烦---Tensorflow学习

發(fā)布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 莫烦---Tensorflow学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

加粗樣式邊學(xué)邊記錄,感謝莫煩大神的教學(xué)視頻,獲益良多,之前已經(jīng)看完了吳恩達(dá)Andrew Ng的視頻,但對Tensorflow的使用還是有很多不懂的地方,還是要花些時間好好學(xué)學(xué)tensorflow和keras。


莫煩大神的視頻學(xué)習(xí)地址


Tensorflow 基礎(chǔ)框架

基于tensorflow構(gòu)建的三層(單隱層)神經(jīng)網(wǎng)絡(luò)如下圖所示:

上圖中,圓形和正方形的節(jié)點被稱為node,在node間流動的數(shù)據(jù)流(多維數(shù)組)被稱為張量(tensor)。

張量 Tensor :

階數(shù)說明
0階張量 = 標(biāo)量(Scalar)也就是一個數(shù)值,如[1][1][1]
1階張量 = 向量(Vector)比如一維的[1,2,3][1 , 2 , 3][1,2,3]
2階張量 = 矩陣(Matrix)比如[[1,2,3],[4,5,6],[7,8,9]][[1,2,3],[4,5,6],[7,8,9]][[1,2,3],[4,5,6],[7,8,9]]
…\dots…\dots
n階張量 = n維數(shù)組

tensor和node之間關(guān)系:

如果輸入tensor的維度是5000×645000\times645000×64,表示有5000個訓(xùn)練樣本,每個樣本有64個特征,則輸入層必須有64個node來接受這些特征。


例子

創(chuàng)建數(shù)據(jù)訓(xùn)練函數(shù),目標(biāo)是要獲得公式y(tǒng) = 0.1*x+0.3中的0.1和0.3這兩個值,即0.1為權(quán)重weight和0.3為偏執(zhí)bias

import tensorflow as tf import numpy as np # create data x_data=np.random.rand(100).astype(np.float32) y_data=x_data*0.1+0.3### create tensorflow structure start## #參數(shù)定義(一維,第二個是取值范圍的下限,第三個參數(shù)是取值范圍的上限) Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0)) biases = tf.Variable(tf.zeros([1]))y = Weights*x_data+biases#計算預(yù)測值和真實值的差值 loss=tf.reduce_mean(tf.square(y-y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) #learning_rate train= optimizer.minimize(loss)#建立完以上這些變量,還需要在NN中初始化這些變量variables init=tf.initialize_all_variables() ###create tensorflow structure end ###sess = tf.Session() sess.run(init) # Very importantfor step in range(201):sess.run(train)if step % 20 == 0: #每隔20步打印一次print(step,sess.run(Weights),sess.run(biases)) WARNING:tensorflow:From /home/will/anaconda3/envs/py35/lib/python3.5/site-packages/tensorflow/python/util/tf_should_use.py:118: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use `tf.global_variables_initializer` instead. 0 [0.36647058] [0.20860067] 20 [0.16722272] [0.25959927] 40 [0.11913844] [0.28849784] 60 [0.10544876] [0.2967253] 80 [0.10155129] [0.2990677] 100 [0.10044166] [0.2997346] 120 [0.10012573] [0.29992446] 140 [0.10003577] [0.29997852] 160 [0.10001019] [0.2999939] 180 [0.10000289] [0.29999828] 200 [0.10000083] [0.2999995]

這時輸出的Weight就很接近1了,bias也很接近0.3


Session 會話控制

import tensorflow as tfmatrix1 = tf.constant([[3,3]]) # 一行兩列的matrix matrix2 = tf.constant([[2],[2]]) #兩行一列的matrixproduct = tf.matmul(matrix1,matrix2) #matrix multipy矩陣乘法。而在np中,是np.dot(m1,m2)類似的功能#method 1 #sess = tf.Session() #result = sess.run(product) # tensorflow思考模式:每run一次就會執(zhí)行一次這個結(jié)構(gòu) #print(result) #sess.close() #有跟沒有差不多,有就系統(tǒng)一點#method 2 with tf.Session() as sess: #意思是打開tf.Session并以sess命名它result2 = sess.run(product)print(result2)

Variable變量

import tensorflow as tfstate = tf.Variable(0,name='counter') # 只有定義成一個變量才是一個變量,不像Python里的 #print(state.name) one = tf.constant(1) #變量 + 常亮 等于 變量 new_value = tf.add(state,one) update = tf.assign(state,new_value) #將new_value變量加載到state上,所以當(dāng)前state的狀態(tài)等于new_value #這里的state就作為儲存新數(shù)值的載體#如果在tensorflow中設(shè)置了變量,那么接下來這一步很重要 init=tf.initialize_all_variables()#must have if define variable#初始化素有的變量,還需要session.run才能激活 with tf.Session() as sess:sess.run(init)for _ in range(3):sess.run(update)print(sess.run(state)) 1 2 3

只要在tensorflow中設(shè)置了變量,記得要在初始化.


Placeholder傳入值

placeholder 是 Tensorflow 中的占位符,暫時儲存變量.

Tensorflow 如果想要從外部傳入data, 那就需要用到 tf.placeholder(), 然后以這種形式傳輸數(shù)據(jù) sess.run(***, feed_dict={input: **})
也就是喂數(shù)據(jù)。

placeholder和variable的區(qū)別:
通俗講:placeholder 是你輸入自己數(shù)據(jù)的接口, variable 是網(wǎng)絡(luò)自身的變量, 通常不是你來進(jìn)行修改, 而是網(wǎng)絡(luò)自身會改動更新.

import tensorflow as tfinput1=tf.placeholder(tf.float32) #tensorflow里大多數(shù)情況只能處理float32的情況 #也可以規(guī)定數(shù)組大小,如兩行兩列的數(shù)組:input1=tf.placeholder(tf.float32,[2,2]) input2=tf.placeholder(tf.float32)output=tf.multiply(input1,input2)with tf.Session() as sess:print(sess.run(output,feed_dict={input1:[7.],input2:[2.]})) #用placeholder跟feed_dict是一個綁定的關(guān)系,用了就需要給它輸入數(shù)據(jù) [14.]

添加層 def add_layer()

定義添加神經(jīng)層的函數(shù)def add_layer(),它有四個參數(shù):輸入值、輸入的大小、輸出的大小和激勵函數(shù),我們設(shè)定默認(rèn)的激勵函數(shù)是None。

import tensorflow as tfdef add_layer(inputs,in_size,out_size,activation_function=None): #None的情況就是線性激活函數(shù)Weights = tf.Variable(tf.random_normal([in_size,out_size]))biases = tf.Variable(tf.zeros([1,out_size])+0.1) #在機(jī)器學(xué)習(xí)中bias推薦不為0Wx_plus_b = tf.matmul(inputs,Weights) + biasesif activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b)return outputs

建造神經(jīng)網(wǎng)絡(luò)

import tensorflow as tf import numpy as npdef add_layer(inputs,in_size,out_size,activation_function=None): #None的情況就是線性激活函數(shù)Weights = tf.Variable(tf.random_normal([in_size,out_size]))biases = tf.Variable(tf.zeros([1,out_size])+0.1) #在機(jī)器學(xué)習(xí)中bias推薦不為0Wx_plus_b = tf.matmul(inputs,Weights) + biasesif activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b)return outputsx_data = np.linspace(-1,1,300)[:,np.newaxis] #-1到1的范圍內(nèi)300個單位,即有300行,300個例子 noise = np.random.normal(0,0.05,x_data.shape) y_data = np.square(x_data) - 0.5 + noisexs = tf.placeholder(tf.float32,[None,1]) #輸入只有1個特征,所以這里是1,輸出也一樣 ys = tf.placeholder(tf.float32,[None,1]) # None的意思是無論輸入多少個例子都o(jì)kl1 = add_layer(xs,1,10,activation_function=tf.nn.relu) prediction = add_layer(l1,10,1,activation_function=None) #構(gòu)建的是——輸入層1個、隱藏層10個、輸出層1個的神經(jīng)網(wǎng)絡(luò)。# 對求和的所有數(shù)求一個平均值,也就是平均的誤差是多少 loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1])) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #learning_rateinit = tf.initialize_all_variables() sess = tf.Session() sess.run(init)for i in range(1000):sess.run(train_step,feed_dict={xs:x_data,ys:y_data})if i % 50 == 0:print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #loss也是要用到placeholder,只要用到placeholder都要加上feed_dict 0.53408515 0.0043351008 0.003585369 0.0032615305 0.0030836272 0.0029586344 0.0028774897 0.0028177483 0.0027668795 0.0027297884 0.0026985474 0.0026706108 0.0026462309 0.0026261543 0.0026080583 0.002592326 0.0025791153 0.0025680475 0.0025586013 0.0025521303

訓(xùn)練結(jié)果


輸出結(jié)果可視化

優(yōu)化過程中,結(jié)果可視化可以給我們指引優(yōu)化方向

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 作為python中輸出結(jié)果可視化的一個模塊 %matplotlib #在jupyter notebook加上這個才能看到動態(tài)圖def add_layer(inputs,in_size,out_size,activation_function=None): #None的情況就是線性激活函數(shù)Weights = tf.Variable(tf.random_normal([in_size,out_size]))biases = tf.Variable(tf.zeros([1,out_size])+0.1) #在機(jī)器學(xué)習(xí)中bias推薦不為0Wx_plus_b = tf.matmul(inputs,Weights) + biasesif activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b)return outputsx_data = np.linspace(-1,1,300)[:,np.newaxis] #-1到1的范圍內(nèi)300個單位,即有300行,300個例子 noise = np.random.normal(0,0.05,x_data.shape) y_data = np.square(x_data) - 0.5 + noisexs = tf.placeholder(tf.float32,[None,1]) #輸入只有1個特征,所以這里是1,輸出也一樣 ys = tf.placeholder(tf.float32,[None,1]) # None的意思是無論輸入多少個例子都o(jì)kl1 = add_layer(xs,1,10,activation_function=tf.nn.relu) prediction = add_layer(l1,10,1,activation_function=None) #構(gòu)建的是——輸入層1個、隱藏層10個、輸出層1個的神經(jīng)網(wǎng)絡(luò)。# 對求和的所有數(shù)求一個平均值,也就是平均的誤差是多少 loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1])) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #learning_rateinit = tf.initialize_all_variables() sess = tf.Session() sess.run(init)fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.scatter(x_data,y_data) plt.ion() #主程序如果不加這個,就會在運行完plt.show()之后暫停 plt.show() for i in range(1000):sess.run(train_step,feed_dict={xs:x_data,ys:y_data})if i % 50 == 0:#print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #loss也是要用到placeholder,只要用到placeholder都要加上feed_dicttry:ax.lines.remove(lines[0]) #在圖片里去除lines的第一個線段,lines也只有一個線段,不然會有很多條線,最后密密麻麻的線except Exception:passprediction_value = sess.run(prediction,feed_dict={xs:x_data})lines = ax.plot(x_data,prediction_value,'r-',lw=5) #將prediction的結(jié)果以曲線的形式plot上去,不是點的形式, lw是線的寬度plt.pause(0.1) #plot過程中暫停0.1s

如果是在jupyter notebook上跑的注意了,如果不加%matplotlib只會輸出散點圖,連紅色曲線都沒有,加上這個指令可以另外打開一個窗口顯示。

各種優(yōu)化器

Tensorflow 中的優(yōu)化器會有很多不同的種類。最基本, 也是最常用的一種就是GradientDescentOptimizer。

其實都是優(yōu)化learning_rate

Tensorboard 可視化好幫手

先放圖片,下圖這里一個塊都可以打開,而且塊需要在原來的代碼中加入一些代碼把它們框起來,以及可以命名它們

import tensorflow as tfdef add_layer(inputs,in_size,out_size,activation_function=None): #None的情況就是線性激活函數(shù)with tf.name_scope('layer'): with tf.name_scope('weights'):Weights = tf.Variable(tf.random_normal([in_size,out_size]),name='W')with tf.name_scope('biases'):biases = tf.Variable(tf.zeros([1,out_size])+0.1,name='b') #在機(jī)器學(xué)習(xí)中bias推薦不為0with tf.name_scope('Wx_plus_b'):Wx_plus_b = tf.matmul(inputs,Weights) + biasesif activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b)return outputs#define placeholder for inputs to network #下面這句意思其實就是在tensorboard里看到的inputs層大框架下包含x_input和y_input with tf.name_scope('inputs'): #要縮進(jìn),別忘了xs = tf.placeholder(tf.float32,[None,1],name='x_input')ys = tf.placeholder(tf.float32,[None,1],name='y_input')#add hidden layer l1 = add_layer(xs,1,10,activation_function=tf.nn.relu) #add output layer prediction = add_layer(l1,10,1,activation_function=None)#the error between prediction and real data with tf.name_scope('loss'): loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]),name='loss') with tf.name_scope('train'): train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #learning_rateinit = tf.initialize_all_variables() sess = tf.Session() writer = tf.summary.FileWriter("logs/",sess.graph) #graph就是把之前編輯的所有信息收集起來放到文件夾里,這里是logs/ #important step sess.run(init)

然后可以在/home/username下看到logs文件夾,然后打開terminal,輸入tensorboard --logdir='logs/'
然后會看到

will@will-450R5G-450R5U:~$ tensorboard --logdir='logs/' TensorBoard 1.10.0 at http://will-450R5G-450R5U:6006 (Press CTRL+C to quit)

按住Ctrl點擊里面的網(wǎng)址就可以打開tensorboard可視化助手查看當(dāng)前的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)了。


如果在jupyter notebook里面重復(fù)運行同一段代碼生成可視化結(jié)果,可能會報錯
這時把jupyter notebook的kernel重啟把里面的緩存數(shù)據(jù)清空(最簡單就是把整個jupyter notebook重啟),再把/logs目錄下的結(jié)果清空,再打開jupyter notebook運行代碼就可以了。


可視化Weights、bias及l(fā)oss等數(shù)據(jù)

這個的代碼運行完了,只能看到graph的內(nèi)容,看不到histogram的內(nèi)容和event的內(nèi)容,奇怪,不知道什么情況,有哪位大神知道的,望指教

from __future__ import print_function import tensorflow as tf import numpy as np#這里加多了一個參數(shù),n_layer是添加層的名字 def add_layer(inputs, in_size, out_size, n_layer, activation_function=None):# add one more layer and return the output of this layerlayer_name = 'layer%s' % n_layer #從這里可以看出with tf.name_scope(layer_name):with tf.name_scope('weights'):Weights = tf.Variable(tf.random_normal([in_size, out_size]), name='W')#可視化Weights的變化量,第一個參數(shù)是名稱,第二參數(shù)是輸入tf.summary.histogram(layer_name + '/weights', Weights)with tf.name_scope('biases'):biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='b')#可視化biases的變化量tf.summary.histogram(layer_name + '/biases', biases)with tf.name_scope('Wx_plus_b'):Wx_plus_b = tf.add(tf.matmul(inputs, Weights), biases)if activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b, )#可視化outputs的變化量tf.summary.histogram(layer_name + '/outputs', outputs)return outputs# Make up some real data x_data = np.linspace(-1, 1, 300)[:, np.newaxis] noise = np.random.normal(0, 0.05, x_data.shape) y_data = np.square(x_data) - 0.5 + noise# define placeholder for inputs to network with tf.name_scope('inputs'):xs = tf.placeholder(tf.float32, [None, 1], name='x_input')ys = tf.placeholder(tf.float32, [None, 1], name='y_input')# add hidden layer l1 = add_layer(xs, 1, 10, n_layer=1, activation_function=tf.nn.relu) # add output layer prediction = add_layer(l1, 10, 1, n_layer=2, activation_function=None)# the error between prediciton and real data with tf.name_scope('loss'):loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))#可視化loss的變化量,這個很重要,用scalar的話,不會出現(xiàn)在histogram里面,而是出現(xiàn)在event里面#也可以改成在histogram里面顯示,跟上面變量顯示一樣的代碼格式tf.summary.scalar('loss', loss)with tf.name_scope('train'):train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)sess = tf.Session() #給所有訓(xùn)練圖合并,tf.merge_all_summaries()方法會對我們所有的 summaries 合并到一起. merged = tf.summary.merge_all()writer = tf.summary.FileWriter("logs/", sess.graph)init = tf.global_variables_initializer() sess.run(init)for i in range(1000):sess.run(train_step, feed_dict={xs: x_data, ys: y_data})if i % 50 == 0:result = sess.run(merged,feed_dict={xs: x_data, ys: y_data}) #merged也是要運行才能記錄結(jié)果的 writer.add_summary(result, i)

高階內(nèi)容

Classification 分類任務(wù)

這里需要MNIST的數(shù)據(jù)集,這個需要翻墻才能下載,一開始不知道老是報錯,數(shù)據(jù)集不大,建議找找資源跑一下,挺有收獲的。
數(shù)據(jù)集下載地址:http://yann.lecun.com/exdb/mnist/
其實運行代碼就會自動下載,不需要手動下載,手動下載需要把壓縮包放在/home/user/MNIST_data/目錄下。

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #number 1 to 10 data #下面這句命令是幫助你下載這個數(shù)據(jù)集 mnist = input_data.read_data_sets('MNIST_data', one_hot=True)def add_layer(inputs, in_size, out_size, activation_function=None,):# add one more layer and return the output of this layerWeights = tf.Variable(tf.random_normal([in_size, out_size]))biases = tf.Variable(tf.zeros([1, out_size]) + 0.1,)Wx_plus_b = tf.matmul(inputs, Weights) + biasesif activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b,)return outputsdef compute_accuracy(v_xs,v_ys):global predictiony_pre = sess.run(prediction,feed_dict={xs:v_xs})#下面開始計算真實值與預(yù)測值之間的誤差correct_prediction = tf.equal(tf.argmax(y_pre,1),tf.argmax(v_ys,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))result = sess.run(accuracy,feed_dict={xs:v_xs,ys:v_ys})return result#define placeholder for inputs to network xs = tf.placeholder(tf.float32,[None,784]) #784表示像素點,28×28 ys = tf.placeholder(tf.float32,[None,10])#add output layer prediction = add_layer(xs,784,10,activation_function=tf.nn.softmax)#the error between prediction and real data cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),reduction_indices=[1])) #loss train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)sess = tf.Session() #important step sess.run(tf.initialize_all_variables())for i in range(1000):batch_xs,batch_ys = mnist.train.next_batch(100) #從下載好的database提取100個樣本sess.run(train_step,feed_dict={xs:batch_xs,ys:batch_ys})if i%50 ==0:print(compute_accuracy(mnist.test.images,mnist.test.labels))

這一節(jié)沒有跑,之前做Andrew Ng的作業(yè)也跑過一個類似的,識別數(shù)字手勢的。

Dropout解決overfitting

""" Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly. """ import tensorflow as tf from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelBinarizer# load data digits = load_digits() X = digits.data y = digits.target y = LabelBinarizer().fit_transform(y) #使y的標(biāo)簽成為one-hot vector,在對應(yīng)位置上顯示1表示對應(yīng)的數(shù)字 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3) #拆分?jǐn)?shù)據(jù)集def add_layer(inputs, in_size, out_size, layer_name, activation_function=None, ):# add one more layer and return the output of this layerWeights = tf.Variable(tf.random_normal([in_size, out_size]))biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, )Wx_plus_b = tf.matmul(inputs, Weights) + biases# here to dropout,dropout操作Wx_plus_b = tf.nn.dropout(Wx_plus_b, keep_prob)if activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b, )tf.summary.histogram(layer_name + '/outputs', outputs)return outputs# define placeholder for inputs to network keep_prob = tf.placeholder(tf.float32) #dropout操作 xs = tf.placeholder(tf.float32, [None, 64]) # 8x8 ys = tf.placeholder(tf.float32, [None, 10])# add output layer l1 = add_layer(xs, 64, 50, 'l1', activation_function=tf.nn.tanh) prediction = add_layer(l1, 50, 10, 'l2', activation_function=tf.nn.softmax)# the loss between prediction and real data cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),reduction_indices=[1])) # loss tf.summary.scalar('loss', cross_entropy) train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)sess = tf.Session() merged = tf.summary.merge_all() # summary writer goes in here train_writer = tf.summary.FileWriter("logs/train", sess.graph) test_writer = tf.summary.FileWriter("logs/test", sess.graph)# tf.initialize_all_variables() no long valid from # 2017-03-02 if using tensorflow >= 0.12 if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:init = tf.initialize_all_variables() else:init = tf.global_variables_initializer() sess.run(init) for i in range(500):# here to determine the keeping probability,0.5表示保留50%的節(jié)點,0.6就保留60%sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob: 0.5})if i % 50 == 0:# record loss #這里的keep_prob要設(shè)置成1,因為這里是要記錄數(shù)據(jù),所以要記錄全部的數(shù)據(jù)train_result = sess.run(merged, feed_dict={xs: X_train, ys: y_train, keep_prob: 1}) test_result = sess.run(merged, feed_dict={xs: X_test, ys: y_test, keep_prob: 1})train_writer.add_summary(train_result, i) test_writer.add_summary(test_result, i)

生成的logs/文件夾下有test和train兩個文件夾,terminal輸入tensorboard --logdir='logs/',然后打開網(wǎng)址,就可以查看dropout的效果,但是很奇怪,test數(shù)據(jù)集好像沒跑成功,只顯示train的效果。


CNN部分

關(guān)鍵內(nèi)容:建立卷積層、池化層

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # number 1 to 10 data mnist = input_data.read_data_sets('MNIST_data', one_hot=True)def compute_accuracy(v_xs, v_ys):global predictiony_pre = sess.run(prediction, feed_dict={xs: v_xs, keep_prob: 1})correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys, keep_prob: 1})return resultdef weight_variable(shape):initial = tf.truncated_normal(shape,stddev=0.1) #shape表示生成張量的維度,mean是均值,stddev是標(biāo)準(zhǔn)差return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape) #創(chuàng)建常量return tf.Variable(initial)def conv2d(x,W):#stride[1,x_movement,y_movement,1] #Must have strides[0]=strides[3]=1,就是上面的第一和第四個數(shù)return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME') def max_pool_2x2(x):#stride[1,x_movement,y_movement,1] return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')# define placeholder for inputs to network xs = tf.placeholder(tf.float32, [None, 784]) # 28x28 ys = tf.placeholder(tf.float32, [None, 10]) keep_prob = tf.placeholder(tf.float32) #-1代表先不考慮輸入的圖片例子多少這個維度 #后面的1是channel的數(shù)量,因為我們輸入的圖片是黑白的,因此channel是1,例如如果是RGB圖像,那么channel就是3 x_image = tf.reshape(xs,[-1,28,28,1]) # print(x_image.shape) #[n_samples,28,28,1]## conv1 layer ## #卷積核patch/kernel 5×5 #in size 1是image的厚度,因為是黑白圖片channel是1 #out size 32輸出是32個featuremap即32個filters W_conv1 = weight_variable([5,5,1,32]) # b_conv1 = bias_variable([32]) h_conv1 = tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1) #output size 28*28*32 h_pool1 = max_pool_2x2(h_conv1) #output size 14*14*32## conv2 layer ## W_conv2 = weight_variable([5,5,32,64]) # b_conv2 = bias_variable([64]) h_conv2 = tf.nn.relu(conv2d(h_pool1,W_conv2)+b_conv2) #output size 14*14*64 h_pool2 = max_pool_2x2(h_conv2) #output size 7*7*64## func1 layer ## W_fc1 = weight_variable([7*7*64,1024]) b_fc1 = bias_variable([1024])h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64]) #[n_smaples,7,7,64] ->> [n_samples,7*7*64] h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1) + b_fc1) h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob)## func2 layer ## W_fc2 = weight_variable([1024,10]) b_fc2 = bias_variable([10]) prediction = tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2) + b_fc2)# the error between prediction and real data cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),reduction_indices=[1])) # loss train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) #這里用Adam優(yōu)化器,不用Gradient Descentsess = tf.Session() # important step # tf.initialize_all_variables() no long valid from # 2017-03-02 if using tensorflow >= 0.12 if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:init = tf.initialize_all_variables() else:init = tf.global_variables_initializer() sess.run(init)for i in range(1000):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5})if i % 50 == 0:print(compute_accuracy( mnist.test.images[:1000], mnist.test.labels[:1000]))

運行結(jié)果:

Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz 0.124 0.736 0.824 0.88 0.899 0.908 0.92 0.932 0.931 0.94 0.949 0.949 0.944 0.958 0.955 0.956 0.96 0.963 0.959 0.965

測試集的準(zhǔn)確率已經(jīng)很高了。

Saver保存和讀取

參數(shù)保存方法(目前TF只能保存參數(shù),不能保存整個網(wǎng)絡(luò)結(jié)構(gòu)):

import tensorflow as tf## Save to file # remember to define the same dtype and shape when restore W = tf.Variable([[1,2,3],[3,4,5]],dtype=tf.float32,name="weights") b = tf.Variable([[1,2,3]],dtype=tf.float32,name="biases") #定義dtype很重要init = tf.global_variables_initializer()saver = tf.train.Saver() #存儲變量with tf.Session() as sess:sess.run(init)save_path = saver.save(sess,"my_net/save_net.ckpt") #第二個是保存路徑print("Save to path:",save_path)

提取方法:

import tensorflow as tf import numpy as np # restore variables # redefine the same shape and same type for your variables #即重新加載參數(shù)需要重定義相同形狀和類型的變量在裝載參數(shù) W = tf.Variable(np.arange(6).reshape((2,3)),dtype=tf.float32,name="weights") b = tf.Variable(np.arange(3).reshape((1,3)),dtype=tf.float32,name="biases")# not need init step saver = tf.train.Saver() with tf.Session() as sess:#提取變量saver.restore(sess,"my_net/save_net.ckpt")print("weights:",sess.run(W))print("biases:",sess.run(b))

如果使用jupyter notebook在同一個窗口使用保存和提取,會報錯,分開使用就可以了。
輸出結(jié)果:

INFO:tensorflow:Restoring parameters from my_net/save_net.ckpt weights: [[1. 2. 3.][3. 4. 5.]] biases: [[1. 2. 3.]]

遷移學(xué)習(xí)transfer learning

""" This is a simple example of transfer learning using VGG. Fine tune a CNN from a classifier to regressor. Generate some fake data for describing cat and tiger length. Fake length setting: Cat - Normal distribution (40, 8) Tiger - Normal distribution (100, 30) The VGG model and parameters are adopted from: https://github.com/machrisaa/tensorflow-vgg Learn more, visit my tutorial site: [莫煩Python](https://morvanzhou.github.io) """from urllib.request import urlretrieve import os import numpy as np import tensorflow as tf import skimage.io import skimage.transform import matplotlib.pyplot as pltdef download(): # download tiger and kittycat imagecategories = ['tiger', 'kittycat']for category in categories:os.makedirs('./for_transfer_learning/data/%s' % category, exist_ok=True)with open('./for_transfer_learning/imagenet_%s.txt' % category, 'r') as file:urls = file.readlines()n_urls = len(urls)for i, url in enumerate(urls):try:urlretrieve(url.strip(), './for_transfer_learning/data/%s/%s' % (category, url.strip().split('/')[-1]))print('%s %i/%i' % (category, i, n_urls))except:print('%s %i/%i' % (category, i, n_urls), 'no image')def load_img(path):img = skimage.io.imread(path)img = img / 255.0# print "Original Image Shape: ", img.shape# we crop image from centershort_edge = min(img.shape[:2])yy = int((img.shape[0] - short_edge) / 2)xx = int((img.shape[1] - short_edge) / 2)crop_img = img[yy: yy + short_edge, xx: xx + short_edge]# resize to 224, 224resized_img = skimage.transform.resize(crop_img, (224, 224))[None, :, :, :] # shape [1, 224, 224, 3]return resized_imgdef load_data():imgs = {'tiger': [], 'kittycat': []}for k in imgs.keys():dir = './for_transfer_learning/data/' + kfor file in os.listdir(dir):if not file.lower().endswith('.jpg'):continuetry:resized_img = load_img(os.path.join(dir, file))except OSError:continueimgs[k].append(resized_img) # [1, height, width, depth] * nif len(imgs[k]) == 400: # only use 400 imgs to reduce my memory loadbreak# fake length data for tiger and cattigers_y = np.maximum(20, np.random.randn(len(imgs['tiger']), 1) * 30 + 100)cat_y = np.maximum(10, np.random.randn(len(imgs['kittycat']), 1) * 8 + 40)return imgs['tiger'], imgs['kittycat'], tigers_y, cat_yclass Vgg16:vgg_mean = [103.939, 116.779, 123.68]def __init__(self, vgg16_npy_path=None, restore_from=None):# pre-trained parameterstry:self.data_dict = np.load(vgg16_npy_path, encoding='latin1').item()except FileNotFoundError:print('Please download VGG16 parameters from here https://mega.nz/#!YU1FWJrA!O1ywiCS2IiOlUCtCpI6HTJOMrneN-Qdv3ywQP5poecM\nOr from my Baidu Cloud: https://pan.baidu.com/s/1Spps1Wy0bvrQHH2IMkRfpg')self.tfx = tf.placeholder(tf.float32, [None, 224, 224, 3])self.tfy = tf.placeholder(tf.float32, [None, 1])# Convert RGB to BGRred, green, blue = tf.split(axis=3, num_or_size_splits=3, value=self.tfx * 255.0)bgr = tf.concat(axis=3, values=[blue - self.vgg_mean[0],green - self.vgg_mean[1],red - self.vgg_mean[2],])# pre-trained VGG layers are fixed in fine-tuneconv1_1 = self.conv_layer(bgr, "conv1_1")conv1_2 = self.conv_layer(conv1_1, "conv1_2")pool1 = self.max_pool(conv1_2, 'pool1')conv2_1 = self.conv_layer(pool1, "conv2_1")conv2_2 = self.conv_layer(conv2_1, "conv2_2")pool2 = self.max_pool(conv2_2, 'pool2')conv3_1 = self.conv_layer(pool2, "conv3_1")conv3_2 = self.conv_layer(conv3_1, "conv3_2")conv3_3 = self.conv_layer(conv3_2, "conv3_3")pool3 = self.max_pool(conv3_3, 'pool3')conv4_1 = self.conv_layer(pool3, "conv4_1")conv4_2 = self.conv_layer(conv4_1, "conv4_2")conv4_3 = self.conv_layer(conv4_2, "conv4_3")pool4 = self.max_pool(conv4_3, 'pool4')conv5_1 = self.conv_layer(pool4, "conv5_1")conv5_2 = self.conv_layer(conv5_1, "conv5_2")conv5_3 = self.conv_layer(conv5_2, "conv5_3")pool5 = self.max_pool(conv5_3, 'pool5')# detach original VGG fc layers and# reconstruct your own fc layers serve for your own purposeself.flatten = tf.reshape(pool5, [-1, 7*7*512])self.fc6 = tf.layers.dense(self.flatten, 256, tf.nn.relu, name='fc6')self.out = tf.layers.dense(self.fc6, 1, name='out')self.sess = tf.Session()if restore_from: saver = tf.train.Saver()#初始restore_from為None,訓(xùn)練完之后就可以使用相應(yīng)的參數(shù)保存文件,這是路徑saver.restore(self.sess, restore_from) else: # training graphself.loss = tf.losses.mean_squared_error(labels=self.tfy, predictions=self.out)self.train_op = tf.train.RMSPropOptimizer(0.001).minimize(self.loss)self.sess.run(tf.global_variables_initializer())def max_pool(self, bottom, name):return tf.nn.max_pool(bottom, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name=name)def conv_layer(self, bottom, name):with tf.variable_scope(name): # CNN's filter is constant, NOT Variable that can be trainedconv = tf.nn.conv2d(bottom, self.data_dict[name][0], [1, 1, 1, 1], padding='SAME')lout = tf.nn.relu(tf.nn.bias_add(conv, self.data_dict[name][1]))return loutdef train(self, x, y):loss, _ = self.sess.run([self.loss, self.train_op], {self.tfx: x, self.tfy: y})return lossdef predict(self, paths):fig, axs = plt.subplots(1, 2)for i, path in enumerate(paths):x = load_img(path)length = self.sess.run(self.out, {self.tfx: x})axs[i].imshow(x[0])axs[i].set_title('Len: %.1f cm' % length)axs[i].set_xticks(()); axs[i].set_yticks(())plt.show()def save(self, path='./for_transfer_learning/model/transfer_learn'):saver = tf.train.Saver()saver.save(self.sess, path, write_meta_graph=False)def train():tigers_x, cats_x, tigers_y, cats_y = load_data()# plot fake length distributionplt.hist(tigers_y, bins=20, label='Tigers')plt.hist(cats_y, bins=10, label='Cats')plt.legend()plt.xlabel('length')plt.show()xs = np.concatenate(tigers_x + cats_x, axis=0)ys = np.concatenate((tigers_y, cats_y), axis=0)vgg = Vgg16(vgg16_npy_path='./for_transfer_learning/vgg16.npy')print('Net built')for i in range(100):b_idx = np.random.randint(0, len(xs), 6)train_loss = vgg.train(xs[b_idx], ys[b_idx])print(i, 'train loss: ', train_loss)vgg.save('./for_transfer_learning/model/transfer_learn') # save learned fc layersdef eval():vgg = Vgg16(vgg16_npy_path='./for_transfer_learning/vgg16.npy',restore_from='./for_transfer_learning/model/transfer_learn')vgg.predict(['./for_transfer_learning/data/kittycat/000129037.jpg', './for_transfer_learning/data/tiger/391412.jpg'])if __name__ == '__main__':# download()# train()eval()

先運行download()把圖片都下載下來,只需要訓(xùn)練最后的兩層,全連接層和輸出層,運行train(),最后運行eval()用樣本里的圖片測試模型。

總結(jié)

以上是生活随笔為你收集整理的莫烦---Tensorflow学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲黄电影| 国产精品久久久久久久免费 | 国产精品久久久久久久久久久久午夜片 | 国产69精品久久久久久 | 蜜臀av性久久久久av蜜臀三区 | av免费福利 | 在线播放视频一区 | 国产精品午夜免费福利视频 | 免费在线h| 久久久精品国产免费观看一区二区 | 免费在线激情电影 | 日韩国产精品一区 | 亚洲综合欧美日韩狠狠色 | 韩国精品在线 | 亚洲精品视频大全 | 草久在线播放 | 免费毛片一区二区三区久久久 | 国产生活一级片 | 色就是色综合 | 狠狠综合网 | 综合精品久久久 | 奇人奇案qvod | 国产精品6| 精品一区精品二区 | 中文字幕精品一区二区精品 | 婷香五月| 精品一区二区免费 | 久久久精品久久 | 91最新在线视频 | 亚洲视频aaa| 久久超碰在线 | 久久久久免费精品国产小说色大师 | 一区二区三区免费在线观看视频 | 亚洲欧洲成人 | 在线国产日本 | 亚洲一区二区天堂 | 久久一区精品 | 99久久综合精品五月天 | 欧美亚洲免费在线一区 | 精选久久 | 在线观看的av网站 | 国产精品涩涩屋www在线观看 | 久久综合色一综合色88 | 日韩免费观看一区二区 | 伊人五月 | 亚洲欧美日韩在线一区二区 | 伊人网av | 日韩精品欧美专区 | 成人一级片视频 | 91少妇精拍在线播放 | 久久伊人91| 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 欧美影院久久 | 免费av高清 | 日本一区二区三区视频在线播放 | 国产又粗又猛又色又黄视频 | 中文字幕在线观看第一区 | 色综合色综合久久综合频道88 | 水蜜桃亚洲一二三四在线 | 91精品久久久久久久久久久久久 | 黄色91免费观看 | 精品一区二区精品 | 亚洲一区二区三区91 | 亚洲人成人99网站 | 久久狠狠婷婷 | 五月综合色 | 国产一区二区日本 | 在线观看片 | 亚洲视频 在线观看 | 天天曰天天干 | 国产精品国产三级国产aⅴ入口 | 久久久久久福利 | 久久精品精品电影网 | 999热线在线观看 | 99国产精品免费网站 | 久久大片网站 | 中文久久精品 | 99久久精品国产系列 | 欧美日韩精品在线免费观看 | 亚洲 综合 国产 精品 | 亚洲色综合 | 成年人免费观看国产 | 欧美黑人xxxx猛性大交 | 国产在线一区观看 | 国产精品久久久久久久久久久久午夜 | 久久99久久99精品免观看粉嫩 | 视频91| 色在线国产 | 日韩综合一区二区三区 | 一区二区精品视频 | 国产大陆亚洲精品国产 | 欧美贵妇性狂欢 | 激情婷婷六月 | av大全在线免费观看 | 亚洲经典视频在线观看 | 久久精品美女视频网站 | 午夜精品久久久久久久99水蜜桃 | 久久久久久久久久久免费av | 6080yy精品一区二区三区 | 日韩午夜av | 婷婷六月综合网 | 国产精品第一 | 69av国产| 激情av网址 | 99热精品在线观看 | 日韩精品中文字幕在线不卡尤物 | a天堂最新版中文在线地址 久久99久久精品国产 | 久久久久www| 久久国产高清视频 | 91热在线 | 免费v片| 久久99精品视频 | 国产一线天在线观看 | 久久视频在线观看免费 | 国产精品视频大全 | 91精品久久久久久久久久久久久 | 国产一区二区在线精品 | 国产午夜精品福利视频 | 国产精品久久久久久久久久久久冷 | 国产在线播放一区二区 | 日韩美在线观看 | 国产精品久久久久久久久软件 | 黄色亚洲精品 | 欧美日韩三级在线观看 | 91看片一区二区三区 | 久久久免费毛片 | 欧美吞精| 91av原创| 99婷婷狠狠成为人免费视频 | 久久国产热视频 | av福利在线 | 天天拍天天爽 | 日韩免费三区 | 91精品久久久久久久久久入口 | 国产99久久久国产精品免费看 | 99久久精品国产欧美主题曲 | 99久久精品国产免费看不卡 | 国产精品www| 国产在线视频导航 | 97久久精品午夜一区二区 | 久久久精选| 丁香av | 中文字幕在线电影 | 久久蜜臀av | 色婷婷福利| 91精品一区二区三区蜜桃 | 精品国内自产拍在线观看视频 | 狠狠色丁香婷婷综合欧美 | 午夜精品久久久久99热app | 在线视频久 | 在线国产视频观看 | 在线精品观看 | 国产黄色在线网站 | 中文字幕av免费 | 午夜 免费 | 91精品婷婷国产综合久久蝌蚪 | 精品在线观看一区二区 | 日韩超碰在线 | 一区二区伦理电影 | 亚洲国产成人久久 | av在线进入 | 高清中文字幕av | 欧美激情在线网站 | 亚洲第一色 | 免费黄色激情视频 | 午夜美女视频 | 欧美日韩亚洲在线观看 | 99精品免费久久久久久久久 | 永久免费视频国产 | 久久婷婷一区二区三区 | a亚洲视频 | 亚洲一区日韩精品 | 成片视频在线观看 | 亚洲免费在线播放视频 | 中文字幕91视频 | 久久国产精品久久精品 | 国产资源在线视频 | www.色综合.com| 亚洲va欧洲va国产va不卡 | 色综合人人 | 中文字幕人成乱码在线观看 | 永久免费毛片在线观看 | 国产午夜精品一区二区三区欧美 | 国产精品久久久久免费 | 欧美日韩不卡在线视频 | 欧美日韩免费网站 | 国内少妇自拍视频一区 | 国产精品自产拍在线观看网站 | 日韩高清毛片 | 在线国产视频一区 | 久久午夜免费观看 | 婷婷狠狠操 | 婷婷成人亚洲综合国产xv88 | 日韩视频二区 | 91精品国产自产91精品 | 精品国产一区二区三区噜噜噜 | 国产精品麻豆一区二区三区 | 丁香五月缴情综合网 | 亚洲免费在线视频 | 99精品国产在热久久 | 国产黄色精品在线 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 久久免费a | 久久高清片| 国产黄色片免费 | 亚洲国产精品一区二区久久,亚洲午夜 | 久久精品99久久久久久2456 | 成人午夜剧场在线观看 | 99久久精品无码一区二区毛片 | 国产香蕉97碰碰碰视频在线观看 | 久久国产精品99国产精 | 麻豆视频免费在线播放 | 九九免费在线观看 | 日韩有码在线播放 | 丁香在线视频 | 免费一级片观看 | 国产真实精品久久二三区 | 久久影院亚洲 | 特级毛片网 | 色播五月激情综合网 | 日日干天天插 | 国产高清久久久 | 青青草视频精品 | 国产人在线成免费视频 | 人人插人人插 | 一本之道乱码区 | 中文字幕人成不卡一区 | 91色吧| 亚洲欧美国产精品 | www.在线看片.com | 亚洲精品在线播放视频 | 青青啪| 91精品人成在线观看 | 18国产精品福利片久久婷 | 天天操天天射天天操 | 亚洲1区在线 | 久久网页| 国产一二区视频 | 最新色站 | 日韩欧美一区二区三区在线 | 亚洲国产999| 狠狠色丁香婷婷综合最新地址 | 成人av一区二区兰花在线播放 | 免费观看全黄做爰大片国产 | 国产成人免费 | 久久久久久久免费观看 | 97精品国产97久久久久久 | av中文字幕在线观看网站 | 国产成人在线免费观看 | 在线观看中文字幕一区 | 国产精品婷婷午夜在线观看 | 国产黄a三级三级三级三级三级 | 国产999视频在线观看 | 日本成人a | 国产五月婷 | 91黄色免费网站 | 欧美一级电影片 | 久草视频中文 | 国产视频中文字幕在线观看 | 91在线免费看片 | 日韩精品在线免费播放 | 一区二区欧美日韩 | 日韩午夜电影 | 国产小视频在线播放 | 欧美日韩一区二区在线 | 99爱爱| 国产精品免费久久久久影院仙踪林 | 手机在线观看国产精品 | 成人午夜电影网 | 9999精品 | 最近中文字幕免费观看 | 久久久久久久久久久久久久免费看 | 四虎国产永久在线精品 | 玖玖色在线观看 | jizz18欧美18 | 国产精品美女www爽爽爽视频 | 激情综合电影网 | 久久夜色精品国产欧美乱 | 中文字幕亚洲精品在线观看 | 91精品在线免费视频 | 免费日韩av电影 | 中文字幕91视频 | 特级西西444www高清大视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 开心激情五月网 | 日本公妇在线观看高清 | 日韩欧美一区二区三区视频 | 亚州精品在线视频 | 国产麻豆果冻传媒在线观看 | 国产美腿白丝袜足在线av | 久久免费精品一区二区三区 | 久久97精品 | 91av99| 亚洲国产播放 | 毛片永久免费 | 欧美日韩首页 | 蜜桃av人人夜夜澡人人爽 | 午夜色性片 | 成人午夜精品 | av软件在线观看 | 国产麻豆成人传媒免费观看 | 欧美日韩精品二区第二页 | 亚洲闷骚少妇在线观看网站 | 激情五月婷婷丁香 | av久久久 | 国内三级在线 | 久久久久伦理电影 | 国产一区二区不卡视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 超碰免费在线公开 | 97成人啪啪网 | 久久精品亚洲一区二区三区观看模式 | 中文字幕在线中文 | 一级大片在线观看 | 国产99爱 | 国产精品久久久久久久久久了 | 日韩乱码在线 | 91在线影视| 九色porny真实丨国产18 | 成人黄在线观看 | 日韩三级在线观看 | 99久久日韩精品免费热麻豆美女 | 日韩午夜在线播放 | 五月婷婷一区二区三区 | 99精品视频中文字幕 | 国产黄a三级三级三级三级三级 | 日本中文字幕网 | 人人爽人人做 | 国产免费久久久久 | 四虎在线影视 | 激情导航| 久久精品小视频 | 在线v片免费观看视频 | 国内视频一区二区 | 人人澡澡人人 | 亚洲 综合 国产 精品 | 婷婷新五月 | 日韩在线观看小视频 | 亚洲国产欧美在线人成大黄瓜 | 日日爽视频 | 欧美精品乱码久久久久久按摩 | 亚洲 中文字幕av | 日韩精品一区二区三区视频播放 | 久久免费黄色大片 | 久久露脸国产精品 | 在线观看黄色免费视频 | 在线免费黄 | 亚洲伊人第一页 | 五月激情婷婷丁香 | 亚洲精品久久久久www | 国产精品视频线看 | 五月天综合在线 | 天天射狠狠干 | 97在线视频观看 | 欧美日韩高清在线观看 | 日韩av一区二区三区 | 天天摸天天操天天舔 | 久久免费激情视频 | 天天操天天射天天插 | 亚洲国产中文字幕 | 激情综合色图 | 日韩高清在线观看 | 一级成人在线 | 午夜免费视频网站 | 亚洲欧美日韩国产精品一区午夜 | 狠狠干狠狠久久 | 91视频a| 国产亚洲精品久久久久久久久久 | 日本最新中文字幕 | 久久久久久高清 | 国产成人香蕉 | 国产乱码精品一区二区三区介绍 | 日本天天操 | 91免费在线看片 | 亚洲电影图片小说 | 日韩亚洲精品电影 | 91精品国产一区二区在线观看 | 精品伊人久久久 | 色国产在线 | 婷婷色伊人 | 综合激情网... | 亚洲国产中文在线 | 亚洲欧美精品一区 | 国产精品久久久久久麻豆一区 | 最近中文字幕免费av | 日精品 | 免费日韩 精品中文字幕视频在线 | 日韩三区在线观看 | 黄色毛片网站在线观看 | 国产最顶级的黄色片在线免费观看 | 亚洲精品国产欧美在线观看 | 欧美国产日韩一区二区三区 | 嫩草伊人久久精品少妇av | 九九色在线 | 久久人人爽人人爽人人片av免费 | 一级大片在线观看 | 丁香五月缴情综合网 | 欧美国产一区在线 | 欧美久久久一区二区三区 | 视频一区二区免费 | 五月在线视频 | 天堂资源在线观看视频 | 亚洲欧美成人网 | 爱av在线网 | 国产一区二区精品91 | 丁香九月婷婷综合 | 中文字幕日本在线 | 国产99久久久精品 | japanesexxxxfreehd乱熟 | 天堂av在线免费 | 久久精品人人做人人综合老师 | 成人免费大片黄在线播放 | 成人免费在线观看电影 | 夜色在线资源 | 在线观看岛国 | 99久久精品免费看国产四区 | 三级性生活视频 | 天天干天天操天天入 | 九九在线精品视频 | 国产色网| 中文字幕一区二区三区在线播放 | 天天干,天天射,天天操,天天摸 | 久久免费视频在线观看 | 激情五月看片 | 日韩首页| 免费日韩 精品中文字幕视频在线 | 久久精品视频日本 | 99久久9| 午夜视频福利 | 国产成人99久久亚洲综合精品 | 国产成人精品日本亚洲999 | 在线视频1卡二卡三卡 | 欧美精品在线观看一区 | 欧美极品在线播放 | 欧美日韩国产精品一区二区亚洲 | 久久国产精品99久久久久久进口 | 天天干天天操天天搞 | 91精品视频一区二区三区 | 天天亚洲 | 天天操天天添 | 久久网站免费 | 狠狠色综合网站久久久久久久 | 在线视频中文字幕一区 | 国产黄色精品在线观看 | 亚洲精品在线视频 | 久久久久久久久久久影视 | 粉嫩高清一区二区三区 | 日本公妇色中文字幕 | 在线观看韩日电影免费 | 欧美激情视频一二区 | 国产精品久久人 | 久久成人亚洲欧美电影 | 国产精品美女视频网站 | 亚洲视频免费在线看 | 国产男女爽爽爽免费视频 | 精品久久五月天 | 在线观看视频福利 | 91在线精品一区二区 | 国产玖玖在线 | 最近中文字幕国语免费av | 夜夜操网站 | 精品国产成人av | 久久精品一二三 | 亚洲天天综合 | 亚洲精品理论片 | 欧美日韩色婷婷 | 日韩色在线观看 | 成人免费毛片aaaaaa片 | 国产特级毛片aaaaaa高清 | 狠狠色丁香婷综合久久 | 久草免费在线观看 | 一级黄色毛片 | 91精品亚洲影视在线观看 | 99精品一区 | 成人午夜网址 | 亚洲欧美婷婷六月色综合 | 久久久午夜剧场 | 欧美色图视频一区 | 亚洲美女免费精品视频在线观看 | 日韩久久精品一区二区 | 久久99这里只有精品 | 欧美视频日韩视频 | 国产xxxx性hd极品 | 国产成人一区二区啪在线观看 | 一区二区中文字幕在线播放 | 97成人在线观看视频 | 久久涩涩网站 | 国产精品免费视频久久久 | 免费瑟瑟网站 | 国产系列精品av | 亚洲精品一区二区三区四区高清 | 精品人人爽| 中文字幕免费高清 | 日韩在线三级 | 中文在线中文a | 成人午夜片av在线看 | 涩涩在线 | 亚洲一级片免费观看 | 亚洲国产精品一区二区久久,亚洲午夜 | 亚州成人av在线 | 欧美性视频网站 | 日日日干 | av电影在线观看 | 999ZYZ玖玖资源站永久 | 日韩中文在线电影 | 国产91精品久久久久 | 日韩在线高清视频 | 国产精品久久久久久久久久妇女 | 天天躁日日躁狠狠躁 | 亚洲精品免费观看视频 | 91视频麻豆视频 | 久久成人午夜 | 色小说av | 麻豆视频在线看 | 国产区av在线 | 成人a v视频 | 在线91网| 久热电影 | 日韩高清在线观看 | 欧美最新另类人妖 | 国产综合91| 中文字幕在线免费看线人 | 免费日韩 精品中文字幕视频在线 | 日韩在线不卡 | 99色精品视频| 福利片免费看 | 丁香婷婷激情啪啪 | 亚洲国产伊人 | 日韩av中文字幕在线 | 亚洲精品视频在 | 日本不卡一区二区 | 久久激五月天综合精品 | 亚洲欧美精品在线 | 久草电影在线观看 | 精品欧美在线视频 | www.888av| 99tvdz@gmail.com| 免费v片| 2023年中文无字幕文字 | 亚洲第二色 | 在线网站黄 | 精品亚洲免费 | 91久久精品一区二区三区 | 中文字幕影片免费在线观看 | 成年人在线电影 | 国产999在线 | 国产精品自在线拍国产 | 98超碰在线观看 | 麻豆传媒视频在线 | 天天插天天 | 激情综合站 | 一区二区三区手机在线观看 | 国产福利免费在线观看 | 在线观看精品一区 | 另类老妇性bbwbbw高清 | a在线免费观看视频 | 国产剧在线观看片 | 欧美日韩国产二区三区 | 高潮久久久久久 | 99高清视频有精品视频 | 日韩在线视 | 九色一区二区 | 国产高清av | 不卡中文字幕av | 三级免费黄 | 高清av免费一区中文字幕 | 亚洲欧美日韩一二三区 | 不卡av在线免费观看 | 日韩精品一区二区三区外面 | 国产精品99久久久久久久久 | 国产生活一级片 | 91在线免费观看国产 | 成人国产亚洲 | 激情五月网站 | 在线观看一区视频 | 午夜黄色影院 | 人人爽久久久噜噜噜电影 | 亚洲免费观看视频 | 激情综合网天天干 | 久久开心激情 | 又黄又爽又色无遮挡免费 | 国产精品入口66mio女同 | 超碰成人免费电影 | 九九九视频在线 | 亚州中文av | 极品久久久久久久 | 4p变态网欧美系列 | 亚洲欧洲精品一区二区 | 婷婷丁香导航 | 手机在线黄色网址 | 国产精品大片在线观看 | 在线小视频你懂的 | 国产成人精品午夜在线播放 | 日韩一区二区三 | av再线观看 | 在线国产激情视频 | 一区二区精品视频 | 天天看天天干 | 九九在线免费视频 | 8090yy亚洲精品久久 | 在线免费高清视频 | 国产精品免费久久久 | 99成人精品 | 96久久久 | 五月婷婷操 | av综合网址 | 久久香蕉国产精品麻豆粉嫩av | 日韩欧美视频在线播放 | 免费在线播放av电影 | 国产麻豆视频 | 黄色大片入口 | 97视频一区 | 久99久在线| 九九热在线播放 | 97色在线观看免费视频 | 一二区电影 | 久草线 | 97国产在线播放 | 爱色av.com| 国产 欧美 在线 | 在线成人一区 | 99久久精品免费看国产麻豆 | 欧美在线一级片 | 黄污网站在线观看 | 免费一区在线 | 国产一级在线 | 97成人在线免费视频 | 91久久久久久久一区二区 | 黄色一级大片在线观看 | 伊人成人久久 | 中文资源在线官网 | 九九九视频精品 | 久久免费播放 | 日韩二区在线观看 | 国产免费观看久久黄 | 免费在线观看一区 | 亚洲黄色av网址 | 日韩中文字幕视频在线观看 | 久久爱www.| 欧美一二三区在线观看 | 亚洲国产精品成人av | 亚洲1级片 | 亚洲国产日韩av | 久久国产精品免费观看 | 中文字幕精品一区 | 欧洲一区二区三区精品 | 女人高潮一级片 | 激情视频免费在线观看 | www免费在线观看 | 久久久精品网 | 500部大龄熟乱视频 欧美日本三级 | 精品久久久影院 | 久久婷亚洲五月一区天天躁 | 色婷婷婷 | 国产精品成人一区二区三区吃奶 | 97人人超碰在线 | 欧美日本国产在线观看 | 久久久久国产免费免费 | 99视| 网站在线观看日韩 | 欧美久久久 | 午夜久久影视 | 超薄丝袜一二三区 | 丁香激情网 | 激情图片区 | 一区二区三区在线电影 | 国产精品美女久久久久久网站 | 亚洲va欧美va | 99热精品视 | 亚洲三级性片 | 五月天久久激情 | 99免费看片 | 日韩高清在线看 | 亚洲欧美视频一区二区三区 | av千婊在线免费观看 | 欧美视屏一区二区 | 日韩欧美一区二区三区在线 | 能在线看的av | 人人干人人干人人干 | 亚洲精品午夜aaa久久久 | 欧美久草网 | 五月激情五月激情 | 国产视频二 | 国产精品99久久久久久小说 | 欧美日韩综合在线 | 中文在线中文a | 99视频久久 | 久久午夜视频 | 99久久精品国产亚洲 | 麻豆传媒一区二区 | 精品99在线观看 | 国产黄色精品在线 | 97色婷婷人人爽人人 | 91香蕉视频黄 | 国产成人免费观看久久久 | 在线国产欧美 | 国产精品久久久久久吹潮天美传媒 | 国产精品99爱| 97视频人人免费看 | 日韩精品黄 | 六月色| 最新日本中文字幕 | 天天干com | 97麻豆视频| 99久久免费看 | 久久国产精品免费视频 | 日韩av影片在线观看 | 超碰97在线资源站 | 欧美精品少妇xxxxx喷水 | 欧美日韩高清一区 | av看片网| 人人干天天射 | 日韩久久久久久久久久久久 | 欧美中文字幕久久 | 91视频a | 欧美国产日韩在线视频 | 91九色性视频 | 中文字幕在线看视频 | 亚洲精品视频在线免费播放 | 日韩av电影网站在线观看 | 探花视频在线观看+在线播放 | 亚洲激情校园春色 | 激情在线五月天 | 日韩中文字幕第一页 | 色资源二区在线视频 | 日韩h在线观看 | 成人av在线资源 | 亚洲第一久久久 | 中文国产成人精品久久一 | 亚洲高清在线观看视频 | 久久99热国产 | 草 免费视频 | 一区三区视频在线观看 | 日韩在线资源 | 欧美精品乱码久久久久久按摩 | 久久精品一区八戒影视 | 九九久久免费 | 午夜国产福利在线 | 91亚洲精品国偷拍 | 五月婷婷激情网 | 免费麻豆 | 欧美整片sss | 国产精品1区2区3区在线观看 | 欧美午夜精品久久久久久孕妇 | 欧美精品中文字幕亚洲专区 | 日韩免费在线观看 | 粉嫩av一区二区三区入口 | 亚洲涩涩网站 | 成人免费在线看片 | 91在线视频免费播放 | 国产一级免费在线 | 中文字幕欧美激情 | 国产精品婷婷午夜在线观看 | 国产成人精品av在线观 | 久久久在线视频 | 国产精品久久影院 | 国产一二区视频 | 亚洲精品福利在线 | 欧美一区二视频在线免费观看 | 99热99 | 久久精品国产成人 | 日本精品久久 | av一区二区三区在线观看 | 国产在线观看你懂的 | 99成人免费视频 | 午夜在线日韩 | www.久久成人 | 国产亚洲免费观看 | 一本之道乱码区 | 97免费视频在线播放 | 三级av免费观看 | 五月婷香蕉久色在线看 | 日韩影视在线 | 久久视频免费在线 | 日韩av快播电影网 | 特黄一级毛片 | 911av视频| 亚洲精品乱码久久久久久9色 | 在线中文字幕观看 | 久久久黄视频 | 日韩中午字幕 | 日韩有码网站 | 91在线精品播放 | 免费视频你懂的 | 天天操天天操天天操天天操天天操天天操 | 欧美日韩国产页 | 国产一级久久久 | 久久天堂影院 | 三级av网| 天天拍夜夜拍 | 在线看毛片网站 | 在线观看免费国产小视频 | 国产福利一区二区三区视频 | 91精品啪在线观看国产81旧版 | 日韩国产欧美在线播放 | 人人草在线观看 | 天天操综合网站 | 一本到在线 | 免费视频黄| 久久精品一区二区三区视频 | www.久久免费视频 | 99热最新网址 | 欧美日韩3p | 久久成人国产精品 | 亚洲精品成人网 | 中文字幕在线免费播放 | 亚洲天堂网在线视频 | 日日操天天操夜夜操 | 草久久精品 | 九色视频网站 | 久久黄网站 | 国产精品成人久久 | 国产永久免费高清在线观看视频 | 2017狠狠干 | 欧美亚洲xxx| 久久久精品久久日韩一区综合 | 欧美色就是色 | 中文字幕无吗 | 西西444www大胆高清视频 | 少妇bbbb | 亚洲春色成人 | 999久久国精品免费观看网站 | 国产精品精品视频 | 欧美精品免费视频 | 精品国产午夜 | 国产精品自拍在线 | 在线视频精品 | 欧美精品中文字幕亚洲专区 | 在线观看黄色免费视频 | 午夜色大片在线观看 | 久久国产精品99国产精 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 日韩精品高清不卡 | 伊人网站 | 日韩欧美精品在线观看视频 | 亚洲视屏在线播放 | 欧美9999| 久久污视频| 久久精品网址 | 久久精品99国产国产精 | 欧美日本啪啪无遮挡网站 | 激情五月五月婷婷 | 日韩精品欧美精品 | 亚洲最大成人网4388xx | 国产不卡在线视频 | 狠狠干天天射 | 欧美美女激情18p | 成人丁香花 | 91视频中文字幕 | 一二三区视频在线 | 久久久精品一区二区三区 | 欧美精品亚洲精品日韩精品 | 国产精品一区二区吃奶在线观看 | 国产精品久久久久久久久久东京 | 91九色porn在线资源 | 亚洲一级在线观看 | 国产精品嫩草影院9 | 日韩av网站在线播放 | 成人黄视频 | 亚洲涩涩一区 | 日韩在线视频一区二区三区 | 欧美国产日韩中文 | 久久黄色网页 | 亚洲精品乱码久久久久久蜜桃动漫 | 中文字幕欧美三区 | 99久久超碰中文字幕伊人 | 日本一区二区不卡高清 | 久久综合久久八八 | 91九色成人 | 日日爱影视 | 麻豆久久久 | 麻豆av一区二区三区在线观看 | 狠狠操.com| 在线 视频 一区二区 | 最新国产精品久久精品 | 五月婷在线视频 | 久久亚洲国产精品 | 午夜国产在线观看 | 国产在线观看 | 五月亚洲婷婷 | 久久国产免费看 | a午夜在线 | 伊人婷婷在线 | 国产伦理一区二区三区 | 在线观看视频国产一区 | 麻豆传媒一区二区 | 一本到视频在线观看 | www.天天干 | 日本在线观看一区 | 中文av不卡 | 成人午夜在线电影 | 精品国产精品久久一区免费式 | 精品国产乱码久久久久久久 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日本黄色大片免费 | 五月天综合网站 | 国产69久久精品成人看 | 天天干天天草天天爽 | 超碰97人人射妻 | 欧美性极品xxxx做受 | 夜夜躁天天躁很躁波 | 69亚洲乱| 亚洲第一中文字幕 | 久久九九网站 | 91精品国产一区二区在线观看 | 久久99精品热在线观看 | 五月婷婷激情综合 | 中文字幕资源网 | 天天射天天操天天干 | 国产免费激情久久 | 中文不卡视频 | 久久久久五月天 | 欧美aa级 | 精品国产一区二区三区不卡 | 麻豆系列在线观看 | 美女久久久久久久 | 国内精品久久久久影院优 | 久久在线精品视频 | 深爱激情五月婷婷 | 十八岁以下禁止观看的1000个网站 | ,午夜性刺激免费看视频 | 成年人免费在线 | 国产精品视频最多的网站 | 免费看特级毛片 | 婷婷国产一区二区三区 | 久艹视频在线观看 | 日日夜夜网 | 中文区中文字幕免费看 | 91亚洲网 | 日韩美女一级片 | 色偷偷97| 99免费在线观看视频 | 色婷婷成人| 国产成人一区二区三区在线观看 | 亚洲欧美视频一区二区三区 | 欧美一区二区在线刺激视频 | 国产一级视频在线 | 丰满少妇久久久 | 国产精品久久久久久模特 | 精品国产乱码久久久久久1区二区 | 日一日操一操 | 久久婷婷国产色一区二区三区 | 国产精品久久电影网 | 黄色国产在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 99久久99久久综合 | 在线 视频 一区二区 | 精品久久久久久久久中文字幕 | 麻豆视频免费看 | 99中文字幕| 天天干夜夜夜 | 亚洲国产成人久久 | 最新av免费在线观看 | 久久电影国产免费久久电影 | av天天在线观看 | www国产亚洲精品久久麻豆 | 精品免费观看视频 | 免费av观看 | 99爱国产精品 | 免费又黄又爽视频 | 色婷婷在线播放 | 又黄又爽又色无遮挡免费 | 国产成人区 | 黄色大片免费网站 | 在线观看国产日韩欧美 | 黄色免费网站 | 亚洲1级片 | 国产一区二区视频在线 | 免费看一级黄色大全 | 国产精品久久一区二区三区不卡 | 在线观看国产日韩欧美 | 丁香视频 | 亚洲精品理论片 | 久久视频中文字幕 | 在线观看亚洲电影 | 亚洲日本国产精品 | 日韩在线观看你懂的 | 国产成人福利片 | 中文字幕精品三级久久久 | 中文字幕在线看视频 | 日本黄网站| 亚洲国产精品久久久久婷婷884 | 99c视频高清免费观看 | 日韩三级免费 | 日韩电影中文,亚洲精品乱码 | 免费一区在线 | 国产精品免费视频一区二区 | 天天色视频 | 天天做天天看 | 国产乱对白刺激视频不卡 | 人人干人人干人人干 | 蜜桃视频色 | 天天在线视频色 | 久久久免费 | 青春草视频在线播放 | 国产精品欧美激情在线观看 | 久久国产精品99久久久久久丝袜 | 国产亚洲人 |