這篇文章主要講解了“ND4J的基本操作總結(jié)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ND4J的基本操作總結(jié)”吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、廣宗網(wǎng)站維護(hù)、網(wǎng)站推廣。
一、ND4J的在內(nèi)存中的存儲(chǔ)結(jié)構(gòu)
對(duì)于ND4J而言,所有的數(shù)據(jù)都存儲(chǔ)在堆外內(nèi)存,是一維的連續(xù)內(nèi)存,INDArray 只是指向了這片連續(xù)的內(nèi)存空間,把連續(xù)內(nèi)存映射成張量,ND4J定義了兩種排序規(guī)則:C order和F order,C order表示行優(yōu)先,F(xiàn) order表示列優(yōu)先。下圖展示了ND4J的內(nèi)存存儲(chǔ)。
上圖可以看出,不過張量是幾維,對(duì)應(yīng)的物理存儲(chǔ)都是一維的連續(xù)內(nèi)存空間,NDArray在指向這片連續(xù)的地址,這正是ND4J強(qiáng)大的地方,對(duì)于各種矩陣操作,例如:矩陣轉(zhuǎn)置、矩陣加標(biāo)量等等操作,都可以輕而易舉的實(shí)現(xiàn),而不用花力氣去dup一個(gè)巨型數(shù)組,高性能也表現(xiàn)在這種優(yōu)雅的設(shè)計(jì)方式上。
二、ND4J的基本操作
1、加法
INDArray add(INDArray other) :元素對(duì)應(yīng)相加,返回的張量是拷貝出來的
INDArray addi(INDArray other) :元素對(duì)應(yīng)相加,與上面不同的是,返回值不是拷貝出來的新數(shù)組,而是用計(jì)算結(jié)果替換原內(nèi)存數(shù)據(jù)
INDArray add(Number n):每個(gè)元素加上一個(gè)標(biāo)量
INDArray addi(Number n):每個(gè)元素加上一個(gè)標(biāo)量,并覆蓋原數(shù)組
2、減法
INDArray sub(Number n):每個(gè)元素減去一個(gè)標(biāo)量
INDArray subi(Number n):每個(gè)元素減去標(biāo)量,并覆蓋原數(shù)組
INDArray sub(INDArray other):對(duì)應(yīng)元素相減
INDArray subi(INDArray other):對(duì)應(yīng)元素相減,并覆蓋原數(shù)組
3、乘法
乘法分兩種,對(duì)應(yīng)元素相乘和矩陣乘法
INDArray mul(INDArray other):對(duì)應(yīng)元素相乘
INDArray muli(INDArray other):對(duì)應(yīng)元素相乘,并覆蓋原數(shù)組
INDArray mmul(INDArray other):矩陣相乘
INDArray mmuli(INDArray other):矩陣相乘,并覆蓋原數(shù)組
4、除法
INDArray div(INDArray other):對(duì)應(yīng)元素相除
INDArray divi(INDArray other):對(duì)應(yīng)元素相除并覆蓋原數(shù)組
INDArray div(Number n):每個(gè)元素除以一個(gè)標(biāo)量
INDArray divi(Number n):每個(gè)元素除以一個(gè)標(biāo)量,并覆蓋原數(shù)組
5、矩陣轉(zhuǎn)置
INDArray transpose()
INDArray transposei()
總結(jié)一下:后面以i結(jié)尾的方法,表示in place,也就是會(huì)覆蓋原內(nèi)存空間的數(shù)據(jù),和”傳引用“一個(gè)意思
6、張量創(chuàng)建
Nd4j類中定義了很多靜態(tài)方法,用于創(chuàng)建N維張量,用法例如: Nd4j.zeros(nRows, nColumns)
public static INDArray zeros(int rows, int columns) :創(chuàng)建一個(gè)全部元素為0的張量
public static INDArray ones(int rows, int columns) :創(chuàng)建一個(gè)全部元素為1的張量
public static INDArray hstack(INDArray... arrs):沿著水平方向接起多個(gè)矩陣,矩陣必須有相同的行
public static INDArray vstack(INDArray... arrs):沿著垂直方向接起多個(gè)矩陣,矩陣必須有相同的列
public static INDArray rand(int rows, int columns):隨機(jī)對(duì)應(yīng)形狀的張量
public static INDArray rand(int[] shape):隨機(jī)對(duì)應(yīng)形狀的張量
7、張量設(shè)置值
INDArray putScalar(int[] i, double value):對(duì)應(yīng)位置設(shè)置標(biāo)量
INDArray putScalar(int row, int col, double value):對(duì)應(yīng)行列處設(shè)置標(biāo)量
INDArray put(INDArrayIndex[] indices, INDArray element):對(duì)應(yīng)維度處設(shè)置INDArray
8、其他操作
INDArray reshape(int... newShape):重新定義張量形狀
這里只是列舉了ND4J的一些常用操作,ND4J還定義了很多對(duì)應(yīng)張量靈活的操作,例如求和、求平均、求最大值、求最小值、BooleanIndexing根據(jù)條件替換張量值、常用函數(shù)操作(sigmoid、tanh等等),要了解更多的詳情,可以深入去看DL4J的example或者單元測(cè)試,去體驗(yàn)這個(gè)優(yōu)秀的張量運(yùn)算庫(kù)。
感謝各位的閱讀,以上就是“ND4J的基本操作總結(jié)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)ND4J的基本操作總結(jié)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!