void
array2matrix()
; matrixxf mat1 = map
(array1,2,
3); cout << mat1 << endl;
//預設是colmajor,output:
//1 3 5
//2 4 6
//假設array原始的矩陣是以下形式(rowmajor)
//1 2 3
//4 5 6
float array2=
; matrix<
float
, dynamic, dynamic, rowmajor> mat2;
mat2 = map
float,2
,3, rowmajor>
>
(array2)
; cout << mat2 << endl;
//matrix的rowmajor/colmajor,需要跟原始矩陣儲存為raw-array對應上,output:
//1 2 3
//4 5 6
}void
changeelement()
; map
map1
(array1,2,
3);printf
("array1 start address=%x, map1 data start address=%x\n"
, array1, map1.
data()
);//位址相同,所以map和raw-array共享記憶體位址
map1(0
,0)=
11;for(
int i =
0; i <6;
++i)
//修改map的值,raw-array受影響,output:
//11
//2//3
//4//5
//6 array1[5]
=11; cout << map1 << endl;
//修改raw-array的值,map受影響,output:
//11 3 5
//2 4 11
float array2=
; matrixxf mat2 = map
(array2,2,
3);printf
("array2 start address=%x, mat2 data start address=%x\n"
, array2, mat2.
data()
);//位址不同,matrix複製構造了map,此時位址並不一致
mat2(0
,0)=
11;for(
int i =
0; i <6;
++i)
//修改matrix的值,raw-array並不會受影響,output:
//1//2
//3//4
//5//6
array2[5]
=11; cout << mat2 << endl;
//修改raw-array的值,matrix並不受影響,output:
//11 3 5
//2 4 6
}
三種實現形式以及時間對比
float
sigmoidfunc
(float x)
vectorxf sigmoid
(const vectorxf& v)
void
sigmoid
(vectorxf& src, vectorxf& dst)
}void
sigmoidtest()
//1. 使用unaryexpr,6ms
dst = src.
unaryexpr
(&sigmoidfunc)
;//cout << dst << endl;
//2. 使用array,10ms
dst =
sigmoid
(src)
;//cout << dst << endl;
//3. 自己實現,4ms
sigmoid
(src, dst)
;}
矩陣*矩陣,mkl會多執行緒加速;矩陣*向量,mkl沒有多執行緒
面試 前向神經網路
z很大或者很小時,梯度都會趨於0 優點 反向傳播 乙個是回歸,乙個是分類 平方誤差基於梯度的學習速度非常緩慢,交叉熵導數是線性的。不能,因為神經網路同層同構,擁有相同的輸入,如果引數也完全相同則無論前向還是後向結果都是一樣的,學習過程永遠無法打破這種對稱性,最終學習過的引數仍然相同。dropout作...
前向神經網路小試身手
三層全連線神經網路 輸入層 2個節點 隱藏層 3個節點 輸出層 1個節點 x為輸入,w1第一層節點的引數,w2第二層節點的引數,y為輸出 import tensorflow as tf w1 tf.variable tf.random normal 2,3 stddev 1,seed 1 w2 tf...
神經網路 前向,反向傳播過程
x,資料集矩陣。每一行的元素代表了乙個樣例的特徵值x1,x2,x3.共有n行,說明資料集一共n個樣例 theta,引數矩陣 行數 要生成的神經元個數 列數 上一層的輸入個數 每一行的元素代表了對樣例各個特徵值的權重 以資料集為x 5 3 使用上圖的網路結構為例 輸入層 x 5 3 說明資料集有5個樣...