首先介紹一下命名實(shí)體識(shí)別任務(wù)數(shù)據(jù)集的常見(jiàn)標(biāo)注格式:
目前創(chuàng)新互聯(lián)建站已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、安寧網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
比如:
將 詞典信息 加入模型被證明對(duì)中文NER任務(wù)很有效,但是結(jié)合詞典的方法通常會(huì)使輸入變成一個(gè) 動(dòng)態(tài) 的結(jié)構(gòu),導(dǎo)致無(wú)法有效利用GPU的并行計(jì)算。FLAT模型通過(guò)采用一個(gè)特殊的 位置編碼 表征輸入結(jié)構(gòu),從而不需要在運(yùn)行時(shí)動(dòng)態(tài)改變結(jié)構(gòu)來(lái)表征輸入。這里推薦去看作者的講解視頻 結(jié)合詞典的中文命名實(shí)體識(shí)別
得到的輸出格式為:
chars 列為樣本中的字符
target 列為標(biāo)簽
bigrams 列為兩兩相鄰字符組成的雙字
seq_len 為chars列中字符的個(gè)數(shù)
根據(jù)數(shù)據(jù)集字段中的字符構(gòu)建對(duì)應(yīng)的詞典vocab。
給定預(yù)訓(xùn)練embedding的路徑, StaticEmbdding 函數(shù)根據(jù) vocab 從embedding中抽取相應(yīng)的數(shù)據(jù)(只會(huì)將出現(xiàn)在vocab中的詞抽取出來(lái),如果沒(méi)有找到,則會(huì)隨機(jī)初始化一個(gè)值(但如果該word是被標(biāo)記為no_create_entry的話(huà),則不會(huì)單獨(dú)創(chuàng)建一個(gè)值,而是會(huì)被指向unk的index))。
加載詞典數(shù)據(jù),得到 w_list ,詞典中的詞匯可包含兩個(gè),三個(gè)等多個(gè)字符。
equip_chinese_ner_with_lexicon 函數(shù)用來(lái)將詞匯信息lexicon寫(xiě)入樣本中。
lexicons 列為樣本中匹配到的詞匯信息,如 [[0, 1, '中國(guó)'],[3, 5, '天安門(mén)']]
lex_num 列為樣本匹配到的詞匯的個(gè)數(shù)
lex_s 列為各個(gè)匹配詞的起始索引列表,如 [0, 3]
lex_e 列為各個(gè)匹配詞的終止索引列表,如 [1, 5]
concat 函數(shù)將詞典lexicon中匹配到的詞匯拼接到樣本末尾,得到 lattice 列
pos_s 列記為論文中的 Head
pos_e 列即為論文中的 Tail
這三列均被設(shè)置為 Input 。
最后通過(guò)各個(gè) vocab 將datasets中的對(duì)應(yīng)字符字段轉(zhuǎn)成數(shù)字(vocab中的id)。Vocabulary類(lèi)的主要作用就是實(shí)現(xiàn)字符和對(duì)應(yīng)id之間的互相轉(zhuǎn)換。
最終即得到了FLAT整體框架圖中所需要的輸入數(shù)據(jù)。
map( ):接收一個(gè)函數(shù),應(yīng)用到RDD中的每個(gè)元素,然后為每一條輸入返回一個(gè)對(duì)象。
flatMap( ):接收一個(gè)函數(shù),應(yīng)用到RDD中的每個(gè)元素,返回一個(gè)包含可迭代的類(lèi)型(如list等)的RDD,可以理解為先Map(),后flat().
按照你的要求編寫(xiě)的Python程序如下
def flat(nestedlist):
outcome = [nestedlist[i][j] for i in range(len(nestedlist)) for j in range(len(nestedlist[i]))]
return outcome
print(flat([[1,2,3],[4,5,6],[7,8,9]]))
源代碼(注意源代碼的縮進(jìn))
如果c是整數(shù)或者矩陣,去掉.sum()應(yīng)該可以運(yùn)行,bool型會(huì)自動(dòng)轉(zhuǎn)成整型。
c?+=?(a.flat?==?b.flat)
如果你是想把a(bǔ)rray([[1,2],[3,4]])捋平,變成array([1,2,3,4]),有三種方式:flat屬性,flatten方法,ravel方法
如:
import numpy as np
a = np.array([[1,2],[3,4]])
a
array([[1,2],
[3,4]])
b = np.array(a.flat)
b
array([1,2,3,4])
c = a.flatten()
c
array([1,2,3,4])
d = a.ravel()
d
array([1,2,3,4])
Mat類(lèi):
是用于保存圖像以及其他矩陣數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
圖像載入函數(shù)imread():
Mat imread(const string filename, int flags=1);
filename表示圖像載入的路徑;
flags為載入標(biāo)識(shí)。
flags=0 將圖像轉(zhuǎn)換為灰度再返回;
flags=1 將圖像轉(zhuǎn)換成彩色再返回;
flags=2 若載入圖像的深度是16位或者32位,就返回對(duì)應(yīng)的圖像深度,否則,將圖像轉(zhuǎn)換為8位圖像再返回。
flags=2|4 載入最真實(shí)無(wú)損的源圖像
若flags不在枚舉類(lèi)型當(dāng)中,flags0 返回一個(gè)三通道的彩色圖像;flags=0 返回灰度圖像;flags0 返回包含Alpha通道的加載圖像。
圖像顯示函數(shù)imshow():
void imshow(const string winname, InputArray mat);
winname填寫(xiě)要顯示的窗口標(biāo)識(shí)名稱(chēng);
mat填需要顯示的圖像。
輸出圖像到文件imwrite():
bool imwrite(const string filename, InputArray img, const vector params=vector());
第一個(gè)參數(shù)filename表示要寫(xiě)入的文件名
第二個(gè)參數(shù)img表示Mat類(lèi)型的圖像數(shù)據(jù)
通道分離split()函數(shù);
void split(const Mat src, Mat* mvbegin);
void split(InputArray m, OutputArrayofArray mv);
第一個(gè)參數(shù)表示需要進(jìn)行分離的多通道數(shù)組;
第二個(gè)參數(shù)表示函數(shù) 輸出數(shù)組或輸出的vector容器。
通道合并merge()函數(shù):
void merge(const Mat* mv, size_t count, OutputArray dst)
void merge(InputArrayOfArray mv, OutputArray dst);
第一個(gè)參數(shù)mv表示需要被合并的輸入矩陣或vector容器的陣列,mv參數(shù)中所有矩陣必須擁有一樣的尺寸;
第二個(gè)參數(shù)count表示當(dāng)mv為空白的C數(shù)組時(shí),代表輸入矩陣的個(gè)數(shù),通??梢允÷圆粚?xiě);
第三個(gè)參數(shù)dst表示輸出矩陣,和mv擁有一樣的尺寸和深度
Python與OpenCV圖像簡(jiǎn)單操作
文章目錄
OpenCV安裝
1.讀取圖片
2.保存圖片
3.截取部分圖像
4.圖片翻轉(zhuǎn)
5.縮放圖片
6.轉(zhuǎn)換為灰度圖像
7.在一個(gè)窗口中顯示兩張圖片
8.繪圖功能
OpenCV安裝
打開(kāi)命令行輸入 pip install opencv-python(前提是有python環(huán)境)
1.讀取圖片
使用 cv2.imread() 函數(shù),給出了幾種讀取圖片路徑的寫(xiě)法
import cv2#導(dǎo)入opencv包
#python中不需要聲明變量
img1 = cv2.imread("D:/test/1.jpg")#絕對(duì)路徑,推薦
img2 = cv2.imread("D:\\test\\2.jpg")#通常是兩個(gè)斜線(xiàn),單右斜線(xiàn)會(huì)被當(dāng)成轉(zhuǎn)義符
img3 = cv2.imread("3.jpeg")#相對(duì)路徑,將圖片放在py文件對(duì)應(yīng)目錄下
cv2.imshow("test1", img1)
cv2.imshow("test2", img2)
cv2.imshow("test3", img3)
cv2.waitKey(0)#沒(méi)有這一句圖片會(huì)一閃而過(guò)
##waitkey(delay=0),等待用戶(hù)輸入按鍵,返回該按鍵的值
2.保存圖片
使用 cv2.write() 函數(shù)保存圖片
import cv2# 導(dǎo)入OpenCV包
img=cv2.imread("D:/test/3.png",cv2.IMREAD_COLOR)
cv2.imshow("test",img)#OpenCV可以實(shí)現(xiàn)不同格式圖片轉(zhuǎn)換,支持jpg、bmp、png等圖片格式相互無(wú)損轉(zhuǎn)換
cv2.imwrite("D:/test/3.1.png",img)#將改變后的圖像保存
cv2.imwrite("D:/test/3.2.bmp",img)
cv2.waitKey(0)
3.截取部分圖像
import cv2
img = cv2.imread("D:\\test\\2.jpg")
frame = img[200:400,200:400] #截取部分圖像,200-400行,200-400列
cv2.imshow("test",frame)#顯示截取后的圖像
cv2.waitKey(0)
4.圖片翻轉(zhuǎn)
使用cv2.flip(img,flipcode)來(lái)進(jìn)行圖片翻轉(zhuǎn)
flipcode控制圖片翻轉(zhuǎn)方向
import cv2
img=cv2.imread("D:/test/5.jpg",cv2.IMREAD_COLOR)
flipCode1=1#大于0左右翻轉(zhuǎn)
flipCode2=0#等于0上下翻轉(zhuǎn)
flipCode3=-1#小于0先上下翻轉(zhuǎn)再左右翻轉(zhuǎn)
img1 = cv2.flip(img, flipCode1)#filpCode控制圖片翻轉(zhuǎn)方向
img2 = cv2.flip(img, flipCode2)
img3 = cv2.flip(img, flipCode3)
cv2.imshow("test",img)
cv2.imshow("test1",img1)
cv2.imshow("test2",img2)
cv2.imshow("test3",img3)
cv2.waitKey(0)
5.縮放圖片
cv2.resize(img,dsize,fx,fy),dsize和fx,fy都可以設(shè)置圖片大小,不能同時(shí)為0
import cv2# 導(dǎo)入OpenCV包
img = cv2.imread("D:/test/2.jpg",cv2.IMREAD_COLOR)
img1 = cv2.resize(img, (700, 700))#設(shè)置輸出圖片的尺寸
img2 = cv2.resize(img, None, fx=0.7, fy=0.7)#None的位置本來(lái)是輸出圖片的尺寸,這里設(shè)置了縮放因子
#fx-水平軸上的比例因子,fy-垂直軸上的比例因子
cv2.imshow("test", img)
cv2.imshow("test1", img1)
cv2.imshow("test2", img2)
cv2.imwrite("D:/test/resize.jpg", img1)# 保存圖像
cv2.waitKey(0)
6.轉(zhuǎn)換為灰度圖像
cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.COLOR_RGB2GRAY表示把RGB圖像轉(zhuǎn)為灰度圖像,2前是轉(zhuǎn)換前,2后是轉(zhuǎn)換后
import cv2#導(dǎo)入opencv包
#python中不需要聲明變量
img = cv2.imread("D:/test/1.jpg")#cv2.imread讀進(jìn)來(lái)的圖片格式是BGR(W,H,C),而不是RGB
cv2.imshow("BGR", img)
#將圖像轉(zhuǎn)換為RGB格式
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#因?yàn)閛pencv讀取圖片是按BGR讀的,所以轉(zhuǎn)換為RGB反而不像原圖
cv2.imshow("RGB",img1)
#將圖像轉(zhuǎn)換為灰度圖像
img2 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
cv2.imshow("GRAY",img2)
cv2.waitKey(0)
7.在一個(gè)窗口中顯示兩張圖片
import cv2
import numpy as np
img = cv2.imread("D:/test/resize.jpg")
img2 = cv2.imread("D:/test/resize.jpg")
#imgs = np.hstack([img,img2])#在水平方向上平鋪
imgs = np.vstack([img,img2])#在豎直方向上堆疊
cv2.imshow("mutil_pic", imgs)
cv2.waitKey(0)
8.繪圖功能
import cv2
import numpy as np
img = 255*np.ones((350,512,3),np.uint8)#unit8:0~255
#ones()為創(chuàng)建一個(gè)元素均為一的矩陣
font = cv2.FONT_HERSHEY_DUPLEX
#font = cv2.FONT_HERSHEY_COMPLEX# 設(shè)置字體
#文本 # 圖片對(duì)象、文本、 位置、 字體、字體大小、顏色、 字體粗細(xì)
cv2.putText(img, "happy day", (50,300), font, 0.8, (25, 25, 25), 2,)#顏色可以自己調(diào)整,范圍為0-255
#線(xiàn) #起點(diǎn) 終點(diǎn) 顏色 粗細(xì)
cv2.line(img, (50,310), (185,310), (0, 0,0),4)
#矩形 #左上頂點(diǎn) 右下頂點(diǎn)
cv2.rectangle(img, (80,8), (200,100), (0, 255,0),2)
#圓形 #圓心 半徑 顏色 控制是否填充 -1表示填充
cv2.circle(img,(60,60),30,(0,0,213),1)
#橢圓 #中心點(diǎn) 長(zhǎng)軸 短軸 偏轉(zhuǎn)角度,起始角度,終止角度
cv2.ellipse(img,(100,300),(100,50),180,0,360,(20,213,79),1)
cv2.imshow("Draw", img)
cv2.waitKey(0)
1.np.vstack([img1,img2]) 當(dāng)img1和img2圖片矩陣維度相同時(shí)才能堆疊
2.除了imread,imwrite 函數(shù)沒(méi)有返回值以外,flip,resize,cvtColor,vstack,hstack都有返回一個(gè)圖片回來(lái)。
網(wǎng)站欄目:flat函數(shù)python flat
當(dāng)前鏈接:http://chinadenli.net/article44/hgdihe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站制作、ChatGPT、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)