您好,登錄后才能下訂單哦!
這篇文章主要講解了“ND4J的基本操作總結(jié)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ND4J的基本操作總結(jié)”吧!
一、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ǔ)。
上圖可以看出,不過(guò)張量是幾維,對(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)相加,返回的張量是拷貝出來(lái)的
INDArray addi(INDArray other) :元素對(duì)應(yīng)相加,與上面不同的是,返回值不是拷貝出來(lái)的新數(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類(lèi)中定義了很多靜態(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)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)ND4J的基本操作總結(jié)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。