日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门

發(fā)布時(shí)間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

tensorflow基礎(chǔ)入門

思考一個(gè)問題:

如何剛好學(xué)習(xí)TensorFlow

  • 類比為一門開發(fā)語言,學(xué)會(huì)語法,api的調(diào)用, 原理性掌握。

語言的要素:

基礎(chǔ)數(shù)據(jù)類型 運(yùn)算符 流程 字典 數(shù)組

import tensorflow as tf# 常量,指定數(shù)據(jù)類型 data1 = tf.constant(2,dtype=tf.int32)# 變量,指定變量名 data2 = tf.Variable(10,name='var')print(data1) print(data2) mark

并沒有打印出數(shù)值,而是描述信息。

TensorFlow中所有的操作都得在會(huì)話中被執(zhí)行。

import tensorflow as tf# 常量,指定數(shù)據(jù)類型 data1 = tf.constant(2,dtype=tf.int32)# 變量,指定變量名 data2 = tf.Variable(10,name='var')print(data1) print(data2)''' sess = tf.Session() print(sess.run(data1))# 這里可以正確打印出data1init = tf.global_variables_initializer() sess.run(init)# 但是當(dāng)我們?nèi)砸眠@個(gè)sess打印data2時(shí)會(huì)報(bào)錯(cuò) # 對(duì)于變量數(shù)值,我們要進(jìn)行初始化。 print(sess.run(data2)) sess.close() # 本質(zhì) tf = tensor + 計(jì)算圖 # tensor 數(shù)據(jù) # op # graphs 數(shù)據(jù)操作 # session ''' init = tf.global_variables_initializer() sess = tf.Session() with sess:sess.run(init)print(sess.run(data1))print(sess.run(data2)) mark

TensorFlow運(yùn)算實(shí)質(zhì)

mark

tensorflow 由張量和計(jì)算圖兩部分構(gòu)成。

常量變量都是張量。張量表示的就是數(shù)據(jù)。

op是operation。 常見的四則運(yùn)算。賦值,兩個(gè)tensor之間的加法。

op + tensor 構(gòu)成了 graphs

# 本質(zhì) tf = tensor + 計(jì)算圖 # tensor 數(shù)據(jù) # op # graphs 數(shù)據(jù)操作 # session

所有的操作都要在session中被run

分析tf代碼:

  • 先分析tensor張量有哪些。
  • 再分析session中的計(jì)算圖有哪些
  • 這兩個(gè)方面掌握清楚就好理解代碼了

本質(zhì)是數(shù)據(jù) + 計(jì)算圖

TensorFlow中所有的變量都必須1初始化之后才能進(jìn)行。init操作實(shí)質(zhì)仍然是一個(gè)計(jì)算圖,
要使用session.tun(init)

直接使用完session 我們還需要close掉

  • 或者使用with進(jìn)行關(guān)閉

view linenumber 看到行號(hào)

常量與變量的四則運(yùn)算

import tensorflow as tf# 兩個(gè)常量 data1 = tf.constant(6) data2 = tf.constant(2)# 定義一個(gè)加法操作 dataAdd = tf.add(data1,data2) # 定義一個(gè)乘法操作 dataMul = tf.multiply(data1,data2) # 定義一個(gè)減法操作 dataSub = tf.subtract(data1,data2) # 定義一個(gè)除法操作 dataDiv = tf.divide(data1,data2)# 使用sess創(chuàng)建。with不需要close with tf.Session() as sess:print(sess.run(dataAdd))print(sess.run(dataMul))print(sess.run(dataSub))print(sess.run(dataDiv)) print('end!') mark import tensorflow as tf data1 = tf.constant(6) # data2變量 data2 = tf.Variable(2) dataAdd = tf.add(data1,data2)# 完成當(dāng)前的數(shù)據(jù)拷貝: 把當(dāng)前dataAdd的結(jié)果追加到data2中 dataCopy = tf.assign(data2,dataAdd)# dataAdd ->data2dataMul = tf.multiply(data1,data2) dataSub = tf.subtract(data1,data2) dataDiv = tf.divide(data1,data2) init = tf.global_variables_initializer() with tf.Session() as sess:sess.run(init)print(sess.run(dataAdd))print(sess.run(dataMul))print(sess.run(dataSub))print(sess.run(dataDiv))# 將6和2相加的結(jié)果放到data2中print('sess.run(dataCopy)',sess.run(dataCopy))#8->data2# 除過run方法還可以使用.eval()直接輸出。eval方法相當(dāng)于下面這句話print('dataCopy.eval()',dataCopy.eval())#8+6->14->data2 = 14# 獲取默認(rèn)的session,執(zhí)行run操作print('tf.get_default_session()',tf.get_default_session().run(dataCopy)) print('end!')

運(yùn)行dataCopy.eval()時(shí),其中的data2已經(jīng)是8了,然后加上常量6.輸出14

而再次運(yùn)行時(shí)data2已經(jīng)變成了14.

計(jì)算圖運(yùn)行的兩種方法:

  • sess.run
  • op.eval()

矩陣基礎(chǔ)

前面的數(shù)據(jù)我們都是初始化的時(shí)候就定義好了,然而有時(shí)我們用到的數(shù)據(jù)是
需要在運(yùn)算時(shí)實(shí)時(shí)插入的。

placeholder

import tensorflow as tf data1 = tf.placeholder(tf.float32) data2 = tf.placeholder(tf.float32) dataAdd = tf.add(data1,data2) with tf.Session() as sess:# 使用feed_dict為placeholder回填數(shù)據(jù)print(sess.run(dataAdd,feed_dict={data1:6,data2:2}))# 1:op dataAdd 2: data (feed_dict = {參數(shù)1:6,參數(shù)2:2}) print('end!')

矩陣運(yùn)算

  • 類比 數(shù)組 M行N列(二維數(shù)組)
  • 外層[] 內(nèi)層嵌套[]
  • 每個(gè)內(nèi)層中括號(hào)表示:[里面 列數(shù)據(jù)]
  • 每個(gè)內(nèi)層[]整體作為一行 行數(shù)
# [[6,6]] 一行兩列的矩陣 import tensorflow as tf # 一行兩列矩陣 data1 = tf.constant([[6,6]]) # 兩行一列矩陣 data2 = tf.constant([[2],[2]]) # 一行兩列 data3 = tf.constant([[3,3]]) # 三行兩列 data4 = tf.constant([[1,2],[3,4],[5,6]])print(data4.shape)# 打印矩陣的維度with tf.Session() as sess:print(sess.run(data4)) # 打印整體print(sess.run(data4[0]))# 打印某一行print(sess.run(data4[:,0]))# M*N的矩陣,第一位是行,第二位是列。# 打印某一列,使用:表示所有行print(sess.run(data4[0,1]))# 1 1 下標(biāo)從0開始算。但是shape是從1開始算的

矩陣運(yùn)算2

一種矩陣加法,和兩種矩陣乘法

矩陣在進(jìn)行加法的時(shí)候,必須要保證兩個(gè)矩陣的行列相等。

我們兩個(gè)(2,3)的矩陣相加,相加之后仍然是一個(gè)(2,3)的矩陣

mark mark

兩個(gè)(2,2)的矩陣相加可以得到新矩陣

mark

A+E 是由第一個(gè)矩陣中第一行第一列的值,加上第二個(gè)矩陣中第一行第一列的值。

以此類推,對(duì)應(yīng)元素的加法

矩陣的乘法

mark

第一個(gè)矩陣的列數(shù),必須等于第二個(gè)矩陣的行數(shù),矩陣才可以進(jìn)行相乘。

(m,k) 與 (k,n) 相乘可以乘出一個(gè)(m,n)的

左側(cè)矩陣的第一行的對(duì)應(yīng)元素乘以右側(cè)矩陣的第一列的對(duì)應(yīng)元素,構(gòu)成新矩陣中(1,1)位置的元素。

這里我們就可以看出為啥要左邊的列,等于右邊的行了,不然左邊這第一行的元素個(gè)數(shù)(列數(shù)) 去右側(cè)的矩陣中找不到對(duì)應(yīng)的元素

代碼實(shí)現(xiàn)

import tensorflow as tf data1 = tf.constant([[6,6]]) data2 = tf.constant([[2],[2]]) data3 = tf.constant([[3,3]]) data4 = tf.constant([[1,2],[3,4],[5,6]])# 矩陣相乘 matMul = tf.matmul(data1,data2)# 直接使用簡單乘法,對(duì)應(yīng)元素相乘 matMul2 = tf.multiply(data1,data2)# 矩陣相加 matAdd = tf.add(data1,data3)with tf.Session() as sess:print(sess.run(matMul))# data1 (1,2) 乘以 data2(2,1) 得到結(jié)果(1,1)print(sess.run(matAdd))# 1行2列 加 1行2列 還是一行兩列print(sess.run(matMul2))# 1x2 2x1 = 2x2 這里涉及到python的廣播機(jī)制# [6,6] 和 [[2].[2]] 都會(huì)被補(bǔ)全成一個(gè)2x2的矩陣。然后對(duì)應(yīng)元素相乘# 使用print一次打印多個(gè)內(nèi)容print(sess.run([matMul,matAdd]))

特殊矩陣初始化

import tensorflow as tf# 兩行三列零矩陣 mat0 = tf.constant([[0,0,0],[0,0,0]])# 兩行三列零矩陣 mat1 = tf.zeros([2,3])# 三行兩列一矩陣 mat2 = tf.ones([3,2])# 兩行三列填充矩陣(15) mat3 = tf.fill([2,3],15) with tf.Session() as sess:print(sess.run(mat0))print('************')print(sess.run(mat1))print('************')print(sess.run(mat2))print('************')print(sess.run(mat3)) mark

一些更為特殊的矩陣

import tensorflow as tf # 三行一列的矩陣 mat1 = tf.constant([[2],[3],[4]]) # 與mat1具有相同的維度,但mat2內(nèi)容為0 mat2 = tf.zeros_like(mat1)# 將0-2之間數(shù)據(jù)分成相等的10份,中間有10個(gè)數(shù)據(jù),要填11 mat3 = tf.linspace(0.0,2.0,11)# 隨機(jī)數(shù)矩陣,2行三列,數(shù)字為-1到2之間的隨機(jī)數(shù) mat4 = tf.random_uniform([2,3],-1,2)with tf.Session() as sess:print(sess.run(mat2))print('************')print(sess.run(mat3))print('************')print(sess.run(mat4)) mark

tf中numpy創(chuàng)建矩陣

類比數(shù)據(jù)庫的學(xué)習(xí)CURD增刪改查

# CURD import numpy as np# 一維數(shù)組 data1 = np.array([1,2,3,4,5]) print(data1) print('***************')# 兩行兩列數(shù)組 data2 = np.array([[1,2],[3,4]]) print(data2) print('***************')# 矩陣的維度 print(data1.shape,data2.shape) print('***************')# 初始化特殊矩陣 zeros ones print(np.zeros([2,3]),np.ones([2,2])) print('***************')# 改查: 修改第二行第一列數(shù)據(jù) data2[1,0] = 5 print(data2) # 查詢第二行第二列數(shù)據(jù) print(data2[1,1]) print('***************')# 基本運(yùn)算:加減乘除# 兩行三列的全一矩陣 data3 = np.ones([2,3])# 簡單乘除加法 print(data3*2) # 對(duì)應(yīng)每個(gè)元素乘2 print(data3/3) # 對(duì)應(yīng)元素除以3 print(data3+2) # 所有元素加2 print('***************')# 矩陣 +*# 兩行三列矩陣 data4 = np.array([[1,2,3],[4,5,6]])# 矩陣對(duì)應(yīng)位置元素相加 print(data3+data4)# 矩陣對(duì)應(yīng)位置元素相乘 print(data3*data4) mark

Matplotlib繪圖模塊

使用numpy準(zhǔn)備數(shù)據(jù),Matplotlib進(jìn)行可視化繪圖

import numpy as np import matplotlib.pyplot as plt # 設(shè)置在瀏覽器內(nèi)顯示 %matplotlib inline # x軸坐標(biāo) x = np.array([1,2,3,4,5,6,7,8]) # y軸坐標(biāo) y = np.array([3,5,7,6,2,6,10,15])# 繪制折線圖,第一個(gè)參數(shù)x軸坐標(biāo),第二個(gè)參數(shù)y軸坐標(biāo)。第三個(gè)參數(shù)顏色 plt.plot(x,y,'r')# 折線 1 x 2 y 3 color plt.show() # 第四個(gè)參數(shù): 線條寬度 plt.plot(x,y,'g',lw=10)# 4 line w # 折線 餅狀 柱狀x = np.array([1,2,3,4,5,6,7,8]) y = np.array([13,25,17,36,21,16,10,15])# 柱狀圖: color 是顏色, alpha 透明度 # 每個(gè)柱狀圖的占用比例 plt.bar(x,y,0.2,alpha=1,color='b')# 5 color 4 透明度 3 0.9 plt.show() mark

綜合性demo

神經(jīng)網(wǎng)絡(luò)逼近股票收盤價(jià)格

結(jié)合TensorFlow實(shí)現(xiàn)一個(gè)綜合性的例子

實(shí)現(xiàn)股票數(shù)據(jù)日線的繪制,并且用人工神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)股票收盤價(jià)格的擬合

mark

其中紅色表示當(dāng)天的股票是上漲的

藍(lán)色表示股票是下降的。9點(diǎn)半開盤,下午三點(diǎn)收盤。

上漲代表: 收盤大于開盤價(jià)格。下跌相反

最低價(jià)會(huì)低于收盤價(jià)或開盤價(jià)。

數(shù)據(jù)加載和圖表的繪制

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inline# 準(zhǔn)備數(shù)據(jù)15組數(shù)據(jù)。(15天) date = np.linspace(1,15,15)# 每天的收盤價(jià)格 endPrice = np.array([2511.90,2538.26,2510.68,2591.66,2732.98,2701.69,2701.29,2678.67,2726.50,2681.50,2739.17,2715.07,2823.58,2864.90,2919.08] )# 每天的開盤價(jià)格 beginPrice = np.array([2438.71,2500.88,2534.95,2512.52,2594.04,2743.26,2697.47,2695.24,2678.23,2722.13,2674.93,2744.13,2717.46,2832.73,2877.40])# 驗(yàn)證日期 print(date)plt.figure()for i in range(0,15):# 繪制 一個(gè)柱狀圖# x是一個(gè)一維數(shù)組兩個(gè)值,對(duì)應(yīng)兩個(gè)y收盤開盤。dateOne = np.zeros([2])dateOne[0] = i;dateOne[1] = i;# 開盤價(jià)格和收盤價(jià)格priceOne = np.zeros([2])priceOne[0] = beginPrice[i]priceOne[1] = endPrice[i]# 繪制每一根柱狀圖,上漲紅色,下降綠色if endPrice[i]>beginPrice[i]:# 日期和開收盤價(jià)格plt.plot(dateOne,priceOne,'r',lw=8)else:plt.plot(dateOne,priceOne,'g',lw=8)plt.show() mark

實(shí)現(xiàn)最簡單的人工神經(jīng)網(wǎng)絡(luò)

mark

輸入: 15行一列的矩陣。

隱藏層矩陣 1行10列

輸出層矩陣 15行一列

mark

輸入: 天數(shù) 輸出: 每天股價(jià)

mark

輸入層與隱藏層進(jìn)行連接

mark

輸入矩陣A 乘以權(quán)重矩陣w1 + 偏置矩陣 構(gòu)成了B

構(gòu)成了我們的中間層矩陣。

矩陣B與第三層如何連接

B*w2 + b2 = C

c就是我們的輸出矩陣。

維度的變化

mark mark

w1維度: 一行十列
b1維度: 一行十列

w2維度: 十行一列
b2維度: 十五行一列

mark mark

加上b1, 會(huì)進(jìn)行廣播機(jī)制。1*10的b1會(huì)被擴(kuò)展成15行10列。也就是每一行一樣。
然后矩陣對(duì)應(yīng)每個(gè)元素相加。

mark

神經(jīng)網(wǎng)絡(luò)內(nèi)部如何進(jìn)行計(jì)算和工作?

mark

給參數(shù)一些簡單的初始值

計(jì)算出一個(gè)C值。而我們的真實(shí)股價(jià)2400 2511

  • 第二次循環(huán)"梯度下降法" 目的減少111

給出一個(gè)新的參數(shù)組合。

for循環(huán)的終止條件: 訓(xùn)練多少次之后,或者差異符合我們的要求

循環(huán)終止會(huì)輸出最后的w1 w2 b1 b2

知道了 這些參數(shù)。我們就知道預(yù)測新的股價(jià)

代碼實(shí)現(xiàn)

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inline date = np.linspace(1,15,15) endPrice = np.array([2511.90,2538.26,2510.68,2591.66,2732.98,2701.69,2701.29,2678.67,2726.50,2681.50,2739.17,2715.07,2823.58,2864.90,2919.08] ) beginPrice = np.array([2438.71,2500.88,2534.95,2512.52,2594.04,2743.26,2697.47,2695.24,2678.23,2722.13,2674.93,2744.13,2717.46,2832.73,2877.40]) print(date) plt.figure() for i in range(0,15):# 1 柱狀圖dateOne = np.zeros([2])dateOne[0] = i;dateOne[1] = i;priceOne = np.zeros([2])priceOne[0] = beginPrice[i]priceOne[1] = endPrice[i]if endPrice[i]>beginPrice[i]:plt.plot(dateOne,priceOne,'r',lw=8)else:plt.plot(dateOne,priceOne,'g',lw=8) # 輸入的日期 dateNormal = np.zeros([15,1]) # 輸出的價(jià)格 priceNormal = np.zeros([15,1])# 進(jìn)行歸一化處理 for i in range(0,15):# 日期最大14dateNormal[i,0] = i/14.0;# 價(jià)格不會(huì)超出3000priceNormal[i,0] = endPrice[i]/3000.0;# 一個(gè)n行一列的占位符 x = tf.placeholder(tf.float32,[None,1]) # 一個(gè)n行一列的占位符 y = tf.placeholder(tf.float32,[None,1])# 隱藏層B # w1是會(huì)被修改的。所以定義一個(gè)變量。 # 初值隨機(jī),一行十列,0到1之間 w1 = tf.Variable(tf.random_uniform([1,10],0,1))# 偏置矩陣一行十列 b1 = tf.Variable(tf.zeros([1,10]))# wb1也就是隱藏層的輸出值是x乘以w1加上b1 wb1 = tf.matmul(x,w1)+b1 # 激勵(lì)函數(shù)增加非線性元素。 layer1 = tf.nn.relu(wb1) # 激勵(lì)函數(shù)# 輸出層 w2 = tf.Variable(tf.random_uniform([10,1],0,1)) b2 = tf.Variable(tf.zeros([15,1]))wb2 = tf.matmul(layer1,w2)+b2 layer2 = tf.nn.relu(wb2) #完成簡單映射# 損失函數(shù)(真實(shí)值-預(yù)測值)的平方。開放出來的結(jié)果再進(jìn)行一個(gè)均值 loss = tf.reduce_mean(tf.square(y-layer2))#y 真實(shí) layer2 計(jì)算# 梯度下降法,梯度下降法。參數(shù)為學(xué)習(xí)率,目標(biāo)是最小化loss train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)with tf.Session() as sess:# 初始化所有的全局變量sess.run(tf.global_variables_initializer())# 程序終止: for循環(huán)次數(shù)for i in range(0,10000):# x,y值填入歸一化之后的x,ysess.run(train_step,feed_dict={x:dateNormal,y:priceNormal})# 進(jìn)行預(yù)測驗(yàn)證# w1w2 b1b2 A + wb -->layer2 得到新的預(yù)測值pred = sess.run(layer2,feed_dict={x:dateNormal})predPrice = np.zeros([15,1])# 還原當(dāng)前價(jià)格。(反歸一化)for i in range(0,15):predPrice[i,0]=(pred*3000)[i,0]plt.plot(date,predPrice,'b',lw=1) plt.show() mark

總結(jié)

以上是生活随笔為你收集整理的3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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