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
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
mark

TensorFlow運算實質

mark
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
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
mark
mark

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

mark
mark

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

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

矩陣的乘法

mark
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
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
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
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
mark

綜合性demo

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

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

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

mark
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

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

mark
mark

輸入: 15行一列的矩陣。

隱藏層矩陣 1行10列

輸出層矩陣 15行一列

mark
mark

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

mark
mark

輸入層與隱藏層進行連接

mark
mark

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

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

矩陣B與第三層如何連接

B*w2 + b2 = C

c就是我們的輸出矩陣。

維度的變化

mark
mark
mark
mark

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

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

mark
mark
mark
mark

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

mark
mark

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

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
mark

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538965.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

r 函數返回多個值_第四講 R描述性統計分析

在“R與生物統計專題”中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。以從淺入深,層層遞進的形式在投必得醫學公眾號更新。在上一講中,我們介紹了第三講 R編程基礎-矩陣和數據框 (戳這里即可跳轉)。到現在為止,大…

python雙線性插值函數_雙線性插值法原理 python實現

碼字不易,如果此文對你有所幫助,請幫忙點贊,感謝!一. 雙線性插值法原理:① 何為線性插值?插值就是在兩個數之間插入一個數,線性插值原理圖如下:在位置 x 進行線性插值,插…

張恩民 php,php100教程_php100張恩民php視頻 56課時_網站編程_寂涯網絡學習基地

1、PHP基本語法和數據類型:(1)、PHP基本語法:1、htm 和 php 混編2、一個語句以 ; (分號結束)3、如何定義一個變量,和變量的使用(2)、PHP數據運算類型四種標量類型:boolean(布爾型)integer(整型)float(浮點型,也作“do…

Oracle 自帶sqldeveloper導入數據到表

步驟 1、建一張字段名和類型與要導入數據一致的表。 2、如果是excel文件,另存為 csv文件。 因為excel文件遇到空格會報錯,excel文件太大工具會讀取文件失敗。 而csv文件是秒級讀取,有空格也會導入不會報錯。 ------------- 更多的Java&am…

百度騰訊中興華為全部入局Linux Foundation深度學習基金會

2019獨角獸企業重金招聘Python工程師標準>>> 雖然名字叫做Linux Foundation,但是這家基金會關注的領域并不局限在Linux操作系統領域。事實上,Linux Foundation基金會還為很多其他開源基金和項目提供支持,比如Cloud Foundry、Autom…

python判斷點在矩形內_判斷平面內矩形和圓是否有交點的python實現

#! /usr/bin/env python# -*- coding: utf-8 -*-filename : 平面坐標內矩形與圓是否相交usage :authors : U{peterguo}copyright: tencentdate : 2012.08.21version : 1.0.0.0Modified History:2012.08.21 創建import osimport sysimport reimport urllib2import timeimport da…

python讀取mysql數據庫_Python操作MySQL數據庫9個實用實例

在Windows平臺上安裝mysql模塊用于Python開發 用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 實例 1、取得 MYSQL 的版本 #…

win主機上搭建php網站運行環境,Windows server 2008搭建php運行環境圖文詳解(php5.3)

這篇文章主要為大家分享下Windows server 2008搭建php運行環境的步驟,需要的朋友可以參考下下載php組件包首先到http://windows.php.net/download/下載你需要的php版本,這里我下載的是php5.3。下面解壓php組件 包到磁盤上。安裝Microsoft Visual C 2008 …

python 登陸微博 被刪除 token_爬取微博信息,使用了cookie仍然無法登錄微博

按照網上的模板自己寫了類似的代碼爬取微博,可是response回來的html是登錄界面的html,應該是沒有成功登陸微博,但是和網上的代碼是基本一樣的from bs4 import BeautifulSoupimport pandas as pdimport requestsurl "https://weibo.cn/2…

plsql developer連接oracle--本地不安裝oracle

工具 數據庫開發程序 PLSQL Developer oracle 客戶端 instantclient,點擊下載 (下載與oracle相同版本或最新版本,如果 PLSQL Developer是32位,則要下載32位的)安裝 1、解壓oracle客戶端 到盤某個目錄。我的目錄是C:\or…

ubuntu networking 與 network-manager

剛遇到的坑,因為操作不當導致網絡中斷,于是手動配置了/etc/network/interfaces , 修復了系統之后發現ubuntu-desktop中的有線鏈接不見了,百度了一下說是networking服務和network-manger服務會起沖突。 【Server版本】 在UbuntuServer版本中&…

mysql 升序_mysql 的 查找 與 排序

mysql 的 查找 &#xff1a;SELECT name,age FROM mytable; # 在mytable 中所有的name,age 數據SELECT name,age FROM mytable WHERE age>25; #在mytable 中所有的name,age 數據&#xff0c;其中age必須小于25SELECT name,age FROM mytable WHERE age<25 OR age>30; #…

Hadoop3.0的新特性

轉載&#xff1a;http://blog.csdn.net/sinat_31726559/article/details/52103229 點擊閱讀原文 -------------------------------------- 1. Hadoop3.0簡介 Hadoop 2.0是基于JDK 1.7開發的&#xff0c;而JDK 1.7在2015年4月已停止更新&#xff0c;這直接迫使Hadoop社區基于…

python torch exp_學習Pytorch過程遇到的坑(持續更新中)

1. 關于單機多卡的處理&#xff1a;在pytorch官網上有一個簡單的示例&#xff1a;函數使用為&#xff1a;torch.nn.DataParallel(model, deviceids, outputdevice, dim)關鍵的在于model、device_ids這兩個參數。DATA PARALLELISM?pytorch.org但是官網的例子中沒有講到一個核心…

php 讀文件返回字符串,PHP:file_get_contents('php:// input')返回JSON消息的字符串...

我正在嘗試在我的PHP應用程序中讀取JSON消息&#xff0c;這是我的php代碼&#xff1a;$json file_get_contents(php://input);$obj json_decode($json, TRUE);echo $obj->{S3URL};當我這樣做時&#xff0c;出現以下錯誤&#xff1a;Trying to get property of non-object …

Android中ListView數據使用sAdapter.notifyDataSetChanged();方法不刷新的問題

原文鏈接&#xff1a;http://blog.csdn.net/caihongdao123/article/details/51513410 點擊閱讀原文 ------------------------- 1.涉及到數據庫 當要動態顯示更數據庫改動&#xff0c;相信大家應該都用過notifyDataSetChanged();. 例如&#xff1a; ...... …

keepalived配置高可用集群

準備工作 分別在主從上安裝keepalived和nginxyum install -y keepalivedyum install -y nginx關閉主從上的防火墻和SELinuxsystemctl stop firewalldsetenforce 0 配置主機 查看主機ip [rootlynn-04 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…

如何快速掌握python包_如何快速掌握一個python模塊?

初學者就別想快了。 我自己是這樣的。先上網看看一些基礎的教程&#xff0c;非常快的過一下&#xff0c;十幾分鐘&#xff0c;主要是了解這個module能干什么&#xff0c;特別是一些基本的功能&#xff0c;頭腦中建立起初步映射。 然后就是用了&#xff0c;不用看了也白搭。我假…

python設計一個函數定義計算并返回n價調和函數_python函數的調和平均值?

我有兩個函數&#xff0c;給出精度和召回分數&#xff0c;我需要做一個調和平均函數&#xff0c;定義在同一個庫中&#xff0c;使用這兩個分數。函數如下所示&#xff1a;功能如下&#xff1a;def precision(ref, hyp):"""Calculates precision.Args:- ref: a l…

jsp超鏈接到java文件,jsp頁面超鏈接傳中文終極解決辦法

在做web前端頁面的時候&#xff0c;經常碰到傳中文問題。網上有許多方案&#xff0c;但仍不能根治&#xff0c;最終要用js或者java的encode相關方法。常規方案有三部&#xff1a;1.改tomcat的server.xml中URIEncodeing為utf-82.頁面中編碼設置為utf-83.整個項目編碼使用utf-8我…