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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

tensorflow基礎入門

思考一個問題:

如何剛好學習TensorFlow

  • 類比為一門開發語言,學會語法,api的調用, 原理性掌握。

語言的要素:

基礎數據類型 運算符 流程 字典 數組

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

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

TensorFlow中所有的操作都得在會話中被執行。

import tensorflow as tf# 常量,指定數據類型 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)# 但是當我們仍要用這個sess打印data2時會報錯 # 對于變量數值,我們要進行初始化。 print(sess.run(data2)) sess.close() # 本質 tf = tensor + 計算圖 # tensor 數據 # op # graphs 數據操作 # session ''' init = tf.global_variables_initializer() sess = tf.Session() with sess:sess.run(init)print(sess.run(data1))print(sess.run(data2)) mark

TensorFlow運算實質

mark

tensorflow 由張量和計算圖兩部分構成。

常量變量都是張量。張量表示的就是數據。

op是operation。 常見的四則運算。賦值,兩個tensor之間的加法。

op + tensor 構成了 graphs

# 本質 tf = tensor + 計算圖 # tensor 數據 # op # graphs 數據操作 # session

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

分析tf代碼:

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

本質是數據 + 計算圖

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

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

  • 或者使用with進行關閉

view linenumber 看到行號

常量與變量的四則運算

import tensorflow as tf# 兩個常量 data1 = tf.constant(6) data2 = tf.constant(2)# 定義一個加法操作 dataAdd = tf.add(data1,data2) # 定義一個乘法操作 dataMul = tf.multiply(data1,data2) # 定義一個減法操作 dataSub = tf.subtract(data1,data2) # 定義一個除法操作 dataDiv = tf.divide(data1,data2)# 使用sess創建。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)# 完成當前的數據拷貝: 把當前dataAdd的結果追加到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相加的結果放到data2中print('sess.run(dataCopy)',sess.run(dataCopy))#8->data2# 除過run方法還可以使用.eval()直接輸出。eval方法相當于下面這句話print('dataCopy.eval()',dataCopy.eval())#8+6->14->data2 = 14# 獲取默認的session,執行run操作print('tf.get_default_session()',tf.get_default_session().run(dataCopy)) print('end!')

運行dataCopy.eval()時,其中的data2已經是8了,然后加上常量6.輸出14

而再次運行時data2已經變成了14.

計算圖運行的兩種方法:

  • sess.run
  • op.eval()

矩陣基礎

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

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回填數據print(sess.run(dataAdd,feed_dict={data1:6,data2:2}))# 1:op dataAdd 2: data (feed_dict = {參數1:6,參數2:2}) print('end!')

矩陣運算

  • 類比 數組 M行N列(二維數組)
  • 外層[] 內層嵌套[]
  • 每個內層中括號表示:[里面 列數據]
  • 每個內層[]整體作為一行 行數
# [[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 下標從0開始算。但是shape是從1開始算的

矩陣運算2

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

矩陣在進行加法的時候,必須要保證兩個矩陣的行列相等。

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

mark mark

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

mark

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

以此類推,對應元素的加法

矩陣的乘法

mark

第一個矩陣的列數,必須等于第二個矩陣的行數,矩陣才可以進行相乘。

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

左側矩陣的第一行的對應元素乘以右側矩陣的第一列的對應元素,構成新矩陣中(1,1)位置的元素。

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

代碼實現

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)# 直接使用簡單乘法,對應元素相乘 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) 得到結果(1,1)print(sess.run(matAdd))# 1行2列 加 1行2列 還是一行兩列print(sess.run(matMul2))# 1x2 2x1 = 2x2 這里涉及到python的廣播機制# [6,6] 和 [[2].[2]] 都會被補全成一個2x2的矩陣。然后對應元素相乘# 使用print一次打印多個內容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內容為0 mat2 = tf.zeros_like(mat1)# 將0-2之間數據分成相等的10份,中間有10個數據,要填11 mat3 = tf.linspace(0.0,2.0,11)# 隨機數矩陣,2行三列,數字為-1到2之間的隨機數 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創建矩陣

類比數據庫的學習CURD增刪改查

# CURD import numpy as np# 一維數組 data1 = np.array([1,2,3,4,5]) print(data1) print('***************')# 兩行兩列數組 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('***************')# 改查: 修改第二行第一列數據 data2[1,0] = 5 print(data2) # 查詢第二行第二列數據 print(data2[1,1]) print('***************')# 基本運算:加減乘除# 兩行三列的全一矩陣 data3 = np.ones([2,3])# 簡單乘除加法 print(data3*2) # 對應每個元素乘2 print(data3/3) # 對應元素除以3 print(data3+2) # 所有元素加2 print('***************')# 矩陣 +*# 兩行三列矩陣 data4 = np.array([[1,2,3],[4,5,6]])# 矩陣對應位置元素相加 print(data3+data4)# 矩陣對應位置元素相乘 print(data3*data4) mark

Matplotlib繪圖模塊

使用numpy準備數據,Matplotlib進行可視化繪圖

import numpy as np import matplotlib.pyplot as plt # 設置在瀏覽器內顯示 %matplotlib inline # x軸坐標 x = np.array([1,2,3,4,5,6,7,8]) # y軸坐標 y = np.array([3,5,7,6,2,6,10,15])# 繪制折線圖,第一個參數x軸坐標,第二個參數y軸坐標。第三個參數顏色 plt.plot(x,y,'r')# 折線 1 x 2 y 3 color plt.show() # 第四個參數: 線條寬度 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 透明度 # 每個柱狀圖的占用比例 plt.bar(x,y,0.2,alpha=1,color='b')# 5 color 4 透明度 3 0.9 plt.show() mark

綜合性demo

神經網絡逼近股票收盤價格

結合TensorFlow實現一個綜合性的例子

實現股票數據日線的繪制,并且用人工神經網絡實現股票收盤價格的擬合

mark

其中紅色表示當天的股票是上漲的

藍色表示股票是下降的。9點半開盤,下午三點收盤。

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

最低價會低于收盤價或開盤價。

數據加載和圖表的繪制

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inline# 準備數據15組數據。(15天) 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):# 繪制 一個柱狀圖# x是一個一維數組兩個值,對應兩個y收盤開盤。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)plt.show() mark

實現最簡單的人工神經網絡

mark

輸入: 15行一列的矩陣。

隱藏層矩陣 1行10列

輸出層矩陣 15行一列

mark

輸入: 天數 輸出: 每天股價

mark

輸入層與隱藏層進行連接

mark

輸入矩陣A 乘以權重矩陣w1 + 偏置矩陣 構成了B

構成了我們的中間層矩陣。

矩陣B與第三層如何連接

B*w2 + b2 = C

c就是我們的輸出矩陣。

維度的變化

mark mark

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

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

mark mark

加上b1, 會進行廣播機制。1*10的b1會被擴展成15行10列。也就是每一行一樣。
然后矩陣對應每個元素相加。

mark

神經網絡內部如何進行計算和工作?

mark

給參數一些簡單的初始值

計算出一個C值。而我們的真實股價2400 2511

  • 第二次循環"梯度下降法" 目的減少111

給出一個新的參數組合。

for循環的終止條件: 訓練多少次之后,或者差異符合我們的要求

循環終止會輸出最后的w1 w2 b1 b2

知道了 這些參數。我們就知道預測新的股價

代碼實現

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]) # 輸出的價格 priceNormal = np.zeros([15,1])# 進行歸一化處理 for i in range(0,15):# 日期最大14dateNormal[i,0] = i/14.0;# 價格不會超出3000priceNormal[i,0] = endPrice[i]/3000.0;# 一個n行一列的占位符 x = tf.placeholder(tf.float32,[None,1]) # 一個n行一列的占位符 y = tf.placeholder(tf.float32,[None,1])# 隱藏層B # w1是會被修改的。所以定義一個變量。 # 初值隨機,一行十列,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 # 激勵函數增加非線性元素。 layer1 = tf.nn.relu(wb1) # 激勵函數# 輸出層 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) #完成簡單映射# 損失函數(真實值-預測值)的平方。開放出來的結果再進行一個均值 loss = tf.reduce_mean(tf.square(y-layer2))#y 真實 layer2 計算# 梯度下降法,梯度下降法。參數為學習率,目標是最小化loss train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)with tf.Session() as sess:# 初始化所有的全局變量sess.run(tf.global_variables_initializer())# 程序終止: for循環次數for i in range(0,10000):# x,y值填入歸一化之后的x,ysess.run(train_step,feed_dict={x:dateNormal,y:priceNormal})# 進行預測驗證# w1w2 b1b2 A + wb -->layer2 得到新的預測值pred = sess.run(layer2,feed_dict={x:dateNormal})predPrice = np.zeros([15,1])# 還原當前價格。(反歸一化)for i in range(0,15):predPrice[i,0]=(pred*3000)[i,0]plt.plot(date,predPrice,'b',lw=1) plt.show() mark

總結

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

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