中國強推動力電池技術,三元電池材料需求增

大陸國家動力電池創新中心昨日(6月30日)舉行成立大會,目的在於將研究資源進行整合,力求在動力電池核心技術取得突破;該創新中心將以國聯公司作為重要合作機構,聚合一汽、東風、北汽等諸多大型汽車集團。

陸媒報導指出,大陸動力電池主要為磷酸鐵鋰電池或三元電池,而三元電池比磷酸鐵鋰電池的能量密度更高、標準電壓更強、電芯占空間更少。同時作為電動車的心臟,動力電池的續航能力也是非常重要的一點,三元電池的續航里程和儲能強於傳統鋰電池,鋰電池每月衰減3%的電量,而三元電池反復使用後每月衰減僅1%-2%,近期已有多家大陸主流汽車廠商表示已生產和使用三元電池。

另從大陸工信部新能源汽車產銷數據來看,大陸電動汽車產業已進入快速增長階段,而作為電動車必備的動力電池需求量也已水漲船高;目前,三元材料較多應用在乘用車領域,作為三元電池的主要需求端,多款車型在政策支持力道不斷提升的同時,對三元材料的需求也在快速增長。

在此之前,大陸科技部發佈的《國家重點研發計畫新能源汽車重點專項實施方案》明確表示,轎車動力電池到2020年單體電池指標達到350Wh,系統達到250Wh以上。中泰證券研究報告預計,到2020年,車用三元材料將達20萬噸,年均增速將達到54%。大陸工信部預測,2018年三元電池的出貨量可望首度超過鋰電池,成為續航電池的主流材料。業內人士預計,三元電池產業可望迎接加速增長,進一步佔領動力電池的市場份額。

(本文由授權提供)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

小三通物流營運型態?

※快速運回,大陸空運推薦?

三星投資比亞迪,傳砸美金5億取得4%股權

中國電動車市場蓬勃,海外投資也躍躍欲試。市場傳出南韓三星電子的中國分公司將參與中國最大的電動車廠商比亞迪(BYD)增資,投資人民幣30億元(約美金5億元)取得比亞迪的4%股權。

《韓國經濟日報》、《日經》等媒體指出,三星電子於7月15日發布消息,指出將投資人民幣30億元取得比亞迪的4%股權。但比亞迪於同日下午否認三星的投資金額。

中國最大電動車廠,比亞迪大發利市

比亞迪以電動車、油電混和車等新能源車產品,於2015年搶下61,772輛的銷售佳績,銷售額達人民幣776億元。在中國,比亞迪亦有30%左右的市占率,且在中央政府持續推動電動車的動能下,比亞迪2016年提出銷量倍增的目標,對零組件的需求也跟著增加。

比亞迪成立於1995年,除電動車事業外,亦有一般汽車、IT產業、新能源產業等相關事業群。目前,比亞迪所使用的車用電池主要皆為自主生產,使比亞迪成為中國目前少數可整合新能源發電、儲能系統、電動車事業的公司之一。

三星積極佈局電動車市場

三星集團對電動車市場的布局行動頻頻。2015年12月,三星電子成立「電裝事業組」,致力於生產次世代汽車零組件,例如:車載半導體、電池、顯示器等。無人駕駛車與聯網汽車也是此事業組的發展方向。

三星表示,本次對比亞迪的投資主要是提高資本業務、零組件供應方面的合作,以搶攻中國正要起飛的電動車市場。但三星也強調不會涉入比亞迪的經營,純屬財務投資。

除了注資比亞迪外,三星旗下的三星SDI也與中國逆變器廠商陽光電源(Sungrow)於合肥投資儲能系統廠,年產能2,000MWh,第一期已於日前投產。此外,三星SDI也曾申請中國工信部的電動車車用電池補助名單,但鎩羽而歸。若要搶攻中國市場,與中國本地企業合作是必須採取的行動。

三星並非第一個入股比亞迪的外資,美國股神巴菲特所擁有的投資公司Berkshire Hathaway曾在2008年取得比亞迪近10%股權,成為一大股東。除此之外,美商蘋果公司在5月12日宣布砸下10億美元投資中國叫車服務公司「滴滴打車」,為三星帶來了中國市場的競爭壓力。

(照片:比亞迪新能源車「元」。來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

上海市半年內推出八項新能源汽車政策

2016上半年,中國與新能源汽車相關的中央及地方各類政策已經推出了80餘項,包括新能源汽車及充電基礎設施推廣規劃、補貼標準、充電費、充電服務費標準、專項資金補貼、及指標交通等配套優惠政策。雖然政策密集,但2016上半年新能源汽車產業的發展依然掣肘於政策的完善性。   2016年上半年,上海市共推出了8項新能源汽車相關政策,包括購買和使用新能源汽車暫行辦法、操作流程、補貼標準,充電基礎設施建設規劃、補貼標準,新能源汽車專項資金,支援新能源貨車推廣計畫,促進新能源汽車分時租賃業務發展指南,以及嘉定區補貼方案。這些政策在內容上覆蓋了從生產、銷售、購買、使用整個新能源汽車生產鏈,也對技術研發給予專項資金的鼓勵支援,同時覆蓋了新能源汽車的分時租賃業務。   相對比2015年上海市新能源汽車的補貼標準,2016年上海的補貼標準在乘用車、客車及專用車領域都有所消退,同時,上海市還首次提出了補貼「按量退坡(減少)」的概念,即超過一定量後補貼會繼續減少,這體現了上海由補貼向市場引導新能源汽車發展的策略。除了補貼標準的降低外,上海市對補貼的審批也更加嚴格,對廠商的銷售資格及消費者的購買資格都做出了嚴格要求。   除此之外,上海市的推廣政策還照顧到了分時租賃業務,通過支持運營車輛額度需求及相關補貼政策鼓勵新能源汽車分時租賃業務發展。  
文章來源:第一電動網(中國大陸)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

網絡權重初始化方法總結(下):Lecun、Xavier與He Kaiming

目錄

博客: | |

權重初始化最佳實踐

書接上回,全0、常數、過大、過小的權重初始化都是不好的,那我們需要什麼樣的初始化?

  • 因為對權重\(w\)的大小和正負缺乏先驗,所以應初始化在0附近,但不能為全0或常數,所以要有一定的隨機性,即數學期望\(E(w)=0\)
  • 因為梯度消失和梯度爆炸,權重不易過大或過小,所以要對權重的方差\(Var(w)\)有所控制

  • 深度神經網絡的多層結構中,每個激活層的輸出對後面的層而言都是輸入,所以我們希望不同激活層輸出的方差相同,即\(Var(a^{[l]})=Var(a^{[l-1]})\),這也就意味不同激活層輸入的方差相同,即\(Var(z^{[l]})=Var(z^{[l-1]})\)
  • 如果忽略激活函數,前向傳播和反向傳播可以看成是權重矩陣(轉置)的連續相乘。數值太大,前向時可能陷入飽和區,反向時可能梯度爆炸,數值太小,反向時可能梯度消失。所以初始化時,權重的數值範圍(方差)應考慮到前向和後向兩個過程

權重的隨機初始化過程可以看成是從某個概率分佈隨機採樣的過程,常用的分佈有高斯分佈、均勻分佈等,對權重期望和方差的控制可轉化為概率分佈的參數控制,權重初始化問題也就變成了概率分佈的參數設置問題

在上回中,我們知道反向傳播過程同時受到權重矩陣和激活函數的影響,那麼,在激活函數不同以及每層超參數配置不同(輸入輸出數量)的情況下,權重初始化該做怎樣的適配?這裏,將各家的研究成果匯總如下,

其中,扇入\(fan\_in\)和扇出\(fan\_out\)分別為當前全連接層的輸入和輸出數量,更準確地說,1個輸出神經元與\(fan\_in\)個輸入神經元有連接(the number of connections feeding into the node),1個輸入神經元與\(fan\_out\)個輸出神經元有連接(the number of connections flowing out of the node),如下圖所示(來自),

對於卷積層而言,其權重為\(n\)\(c\times h \times w\)大小的卷積核,則一個輸出神經元與\(c\times h \times w\)個輸入神經元有連接,即\(fan\_in = c\times h \times w\),一個輸入神經元與\(n\times h \times w\)個輸出神經元有連接,即\(fan\_out=n\times h \times w\)

期望與方差的相關性質

接下來,首先回顧一下期望與方差計算的相關性質。

對於隨機變量\(X\),其方差可通過下式計算,
\[ Var(X) = E(X^2) – (E(X))^2 \]
若兩個隨機變量\(X\)\(Y\),它們相互獨立,則其協方差為0,
\[ Cov(X, Y) = 0 \]
進一步可得\(E(XY)=E(X)E(Y)\),推導如下,
\[ \begin{align} Cov(X, Y) &= E((X-E(X))(Y-E(Y))) \\ &= E(XY)-E(X)E(Y) =0 \end{align} \]
兩個獨立隨機變量和的方差,
\[ \begin{aligned} \operatorname{Var}(X+Y) &=E\left((X+Y)^{2}\right)-(E(X+Y))^{2} \\ &=E\left(X^{2}+Y^{2}+2 X Y\right)-(E(X)+E(Y))^{2} \\ &=\left(E\left(X^{2}\right)+E\left(Y^{2}\right)+2 E(X Y)\right)-\left((E(X))^{2}+(E(Y))^{2}+2 E(X) E(Y)\right) \\ &=\left(E\left(X^{2}\right)+E\left(Y^{2}\right)+2 E(X) E(Y)\right)-\left((E(X))^{2}+(E(Y))^{2}+2 E(X) E(Y)\right) \\ &=E\left(X^{2}\right)-(E(X))^{2}+E\left(Y^{2}\right)-(E(Y))^{2} \\ &=\operatorname{Var}(X)+\operatorname{Var}(Y) \end{aligned} \]
兩個獨立隨機變量積的方差,
\[ \begin{aligned} \operatorname{Var}(X Y) &=E\left((X Y)^{2}\right)-(E(X Y))^{2} \\ &=E\left(X^{2}\right) E\left(Y^{2}\right)-(E(X) E(Y))^{2} \\ &=\left(\operatorname{Var}(X)+(E(X))^{2}\right)\left(\operatorname{Var}(Y)+(E(Y))^{2}\right)-(E(X))^{2}(E(Y))^{2} \\ &=\operatorname{Var}(X) \operatorname{Var}(Y)+(E(X))^{2} \operatorname{Var}(Y)+\operatorname{Var}(X)(E(Y))^{2} \end{aligned} \]

全連接層方差分析

對線性組合層+非線性激活層,計算如下所示,其中\(z_i^{[l-1]}\)\(l-1\)層第\(i\)個激活函數的輸入,\(a_i^{[l-1]}\)為其輸出,\(w_{ij}^{[l]}\)為第\(l\)層第\(i\)個輸出神經元與第\(j\)個輸入神經元連接的權重,\(b^{[l]}\)為偏置,計算方式如下
\[ \begin{align}a_i^{[l-1]} &= f(z_i^{[l-1]}) \\z_i^{[l]} &= \sum_{j=1}^{fan\_in} w_{ij}^{[l]} \ a_j^{[l-1]}+b^{[l]} \\a_i^{[l]} &= f(z_i^{[l]})\end{align} \]
在初始化階段,將每個權重以及每個輸入視為隨機變量,可做如下假設和推斷,

  • 網絡輸入的每個元素\(x_1,x_2,\dots\)獨立同分佈
  • 每層的權重隨機初始化,同層的權重\(w_{i1}, w_{i2}, \dots\)獨立同分佈,且期望\(E(w)=0\)
  • 每層的權重\(w\)和輸入\(a\)隨機初始化且相互獨立,所以兩者之積構成的隨機變量\(w_{i1}a_1, w_{i2}a_2, \dots\)亦相互獨立,且同分佈;
  • 根據上面的計算公式,同層的\(z_1, z_2, \dots\)獨立同分佈,同層的\(a_1, a_2, \dots\)也為獨立同分佈

需要注意的是,上面獨立同分佈的假設僅在初始化階段成立,當網絡開始訓練,根據反向傳播公式,權重更新后不再相互獨立。

在初始化階段,輸入\(a\)與輸出\(z\)方差間的關係如下,令\(b=0\)
\[ \begin{align} Var(z) &=Var(\sum_{j=1}^{fan\_in} w_{ij} \ a_j) \\ &= fan\_in \times (Var(wa)) \\ &= fan\_in \times (Var(w) \ Var(a) + E(w)^2 Var(a) + Var(w) E(a)^2) \\ &= fan\_in \times (Var(w) \ Var(a) + Var(w) E(a)^2) \end{align} \]

tanh下的初始化方法

若激活函數為線性恆等映射,即\(f(x)=x\),則\(a = z\),自然\(E(a)=E(z)\)\(Var(a) = Var(z)\)

因為網絡輸入的期望\(E(x)=0\),每層權重的期望\(E(w) = 0\),在前面相互獨立的假設下,根據公式\(E(XY)=E(X)E(Y)\),可知\(E(a)=E(z)=\sum E(wa)=\sum E(w)E(a)=0\)。由此可得,
\[ Var(a^{[l]}) = Var(z^{[l]}) = fan\_in \times Var(w) \times Var(a^{[l-1]}) \]
更進一步地,令\(n^{[l]}\)為第\(l\)層的輸出數量(\(fan\_out\)),則第\(l\)層的輸入數量($fan_in \()即前一層的輸出數量為\)n^{[l-1]}\(。第\)L$層輸出的方差為
\[ \begin{align} Var(a^{L}) = Var(z^{[L]}) &= n^{[L-1]} Var(w^{[L]}) Var(a^{[L-1]}) \\ &=\left[\prod_{l=1}^{L} n^{[l-1]} Var(w^{[l]})\right] {Var}(x) \end{align} \]
反向傳播時,需要將上式中的\(n^{[l-1]}\)替換為\(n^{[l]}\)(即\(fan\_in\)替換為\(fan\_out\)),同時將\(x\)替換為損失函數對網絡輸出的偏導。

所以,經過\(t\)層,前向傳播和反向傳播的方差,將分別放大或縮小
\[ \prod^{t} n^{[l-1]} Var(w^{[l]}) \\ \prod^{t} n^{[l]} Var(w^{[l]}) \]
為了避免梯度消失和梯度爆炸,最好保持這個係數為1。

需要注意的是,上面的結論是在激活函數為恆等映射的條件下得出的,而tanh激活函數在0附近可近似為恆等映射,即$tanh(x) \approx x $。

Lecun 1998

Lecun 1998年的paper ,在輸入Standardization以及採用tanh激活函數的情況下,令\(n^{[l-1]}Var(w^{[l]})=1\),即在初始化階段讓前向傳播過程每層方差保持不變,權重從如下高斯分佈採樣,其中第\(l\)層的\(fan\_in = n^{[l-1]}\)
\[ W \sim N(0, \frac{1}{fan\_in}) \]

Xavier 2010

在paper 中,Xavier和Bengio同時考慮了前向過程和反向過程,使用\(fan\_in\)\(fan\_out\)的平均數對方差進行歸一化,權重從如下高斯分佈中採樣,
\[ W \sim N(0, \frac{2}{fan\_in + fan\_out}) \]
同時文章中還提及了從均勻分佈中初始化的方法,因為均勻分佈的方差與分佈範圍的關係為
\[ Var(U(-n, n)) = \frac{n^2}{3} \]
若令\(Var(U(-n, n)) = \frac{2}{fan\_in + fan\_out}\),則有
\[ n = \frac{\sqrt{6}}{\sqrt{fan\_in + fan\_out}} \]
即權重也可從如下均勻分佈中採樣,
\[ W \sim U(-\frac{\sqrt{6}}{\sqrt{fan\_in + fan\_out}}, \frac{\sqrt{6}}{\sqrt{fan\_in + fan\_out}}) \]
在使用不同激活函數的情況下,是否使用Xavier初始化方法對test error的影響如下所示,圖例中帶\(N\)的表示使用Xavier初始化方法,Softsign一種為類tanh但是改善了飽和區的激活函數,圖中可以明顯看到tanh 和tanh N在test error上的差異。

論文還有更多訓練過程中的權重和梯度對比圖示,這裏不再貼出,具體可以參見論文。

ReLU/PReLU下的初始化方法

搬運一下上面的公式,
\[ Var(z)= fan\_in \times (Var(w) \ Var(a) + Var(w) E(a)^2) \]
因為激活函數tanh在0附近可近似為恆等映射,所以在初始化階段可以認為\(E(a) = 0\),但是對於ReLU激活函數,其輸出均大於等於0,不存在負數,所以\(E(a) = 0\)的假設不再成立。

但是,我們可以進一步推導得到,
\[ \begin{align} Var(z) &= fan\_in \times (Var(w) \ Var(a) + Var(w) E(a)^2) \\ &= fan\_in \times (Var(w) (E(a^2) – E(a)^2)+Var(w)E(a)^2) \\ &= fan\_in \times Var(w) \times E(a^2) \end{align} \]

He 2015 for ReLU

對於某個具體的層\(l\)則有,
\[ Var(z^{[l]}) = fan\_in \times Var(w^{[l]}) \times E((a^{[l-1]})^2) \]
如果假定\(w{[l-1]}\)來自某個關於原點對稱的分佈,因為\(E(w^{[l-1]}) = 0\),且\(b^{[l-1]} = 0\),則可以認為\(z^{[l-1]}\)分佈的期望為0,且關於原點0對稱。

對於一個關於原點0對稱的分佈,經過ReLU后,僅保留大於0的部分,則有
\[ \begin{align}Var(x) &= \int_{-\infty}^{+\infty}(x-0)^2 p(x) dx \\&= 2 \int_{0}^{+\infty}x^2 p(x) dx \\&= 2 E(\max(0, x)^2)\end{align} \]
所以,上式可進一步得出,
\[ \begin {align}Var(z^{[l]}) &= fan\_in \times Var(w^{[l]}) \times E((a^{[l-1]})^2) \\&= \frac{1}{2} \times fan\_in \times Var(w^{[l]}) \times Var(z^{[l-1]}) \end{align} \]
類似地,需要放縮係數為1,即
\[ \frac{1}{2} \times fan\_in \times Var(w^{[l]}) = 1 \\ Var(w) = \frac{2}{fan\_in} \]
即從前向傳播考慮,每層的權重初始化為
\[ W \sim N(0, \frac{2}{fan\_in}) \]
同理,從後向傳播考慮,每層的權重初始化為
\[ W \sim N(0, \frac{2}{fan\_out}) \]
文中提到,單獨使用上面兩个中的哪一個都可以,因為當網絡結構確定之後,兩者對方差的放縮係數之比為常數,即每層扇入扇出之比的連乘,解釋如下,

使用Xavier和He初始化,在激活函數為ReLU的情況下,test error下降對比如下,22層的網絡,He的初始化下降更快,30層的網絡,Xavier不下降,但是He正常下降。

He 2015 for PReLU

對於PReLU激活函數,負向部分為\(f(x) = ax\),如下右所示,

對於PReLU,求取\(E((a^{[l-1]})^2)\)可對正向和負向部分分別積分,不難得出,
\[ \frac{1}{2} (1 + a^2) \times fan\_in \times Var(w^{[l]}) = 1 \\Var(w) = \frac{2}{(1 + a^2) fan\_in} \\W \sim N(0, \frac{2}{(1 + a^2) fan\_in}) \\W \sim N(0, \frac{2}{(1 + a^2) fan\_out}) \]

caffe中的實現

儘管He在paper中說單獨使用\(fan\_in\)\(fan\_out\)哪個都可以,但是,在Caffe的實現中,還是提供了兩者平均值的方式,如下所示,當然默認是使用\(fan\_in\)

小結

至此,對深度神經網絡權重初始化方法的介紹已告一段落。雖然因為BN層的提出,權重初始化可能已不再那麼緊要。但是,對經典權重初始化方法經過一番剖析后,相信對神經網絡運行機制的理解也會更加深刻。

以上。

參考

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

nodejs入門之模塊

  • nodejs模塊語法與開閉原則
  • nodejs模塊的底層實現

 一、nodejs模塊語法與開閉原則

關於nodejs模塊我在之前的兩篇博客中都有涉及,但都沒有對nodejs模塊的底層做做任何探討,但是為了使相關內容更方便查看比對理解,這裏還是先引入一下之前兩篇博客的連接:

1.1 exports、module.exports、require()實現模塊導出導入:

 1 //示例一:導出原始值數據
 2 //a.js--用於導出數據
 3 let a = 123;
 4 module.exports.a=a;
 5 //inde.js--用於導入a模塊的數據
 6 let aModule = require('./a.js');
 7 console.log(aModule.a); //123
 8 
 9 //示例二:導出引用值數據
10 //a.js--同上
11 function foo(val){ 
12     console.log(val);
13 }
14 module.exports.foo = foo;
15 //index.js--同上
16 let aModule = require('./a.js');
17 let str = "this is 'index' module"
18 aModule.foo(str); //this is 'index' module
19 
20 //示例三:導出混合數據
21 a.js--同上
22 let a = 123;
23 function foo(val){ 
24     console.log(val);
25 }
26 module.exports = {
27     a:a,
28     foo:foo
29 }
30 //inde.js--同上
31 let aModule = require('./a.js');
32 let str = "this is 'index' module"
33 console.log(aModule.a);//123
34 aModule.foo(str); //this is 'index' module

在上面這些示例中,沒有演示exports的導出,暫時可以把它看作與同等於module.exports,例如:

 1 //a.js -- 導出模塊
 2 let a = 123;
 3 function foo(val){ 
 4     console.log(val);
 5 }
 6 exports.a = a;
 7 exports.foo = foo;
 8 
 9 //inde.js -- 引用模塊a
10 let aModule = require('./a.js');
11 let str = "this is 'index' module"
12 console.log(aModule.a);//123
13 aModule.foo(str); //this is 'index' module

但是使用exports導出模塊不能這麼寫:

 1 //a.js
 2 let a = 123;
 3 function foo(val){ 
 4     console.log(val);
 5 }
 6 exports = {
 7     a:a,
 8     foo:foo
 9 }
10 
11 //index.js
12 let aModule = require('./a.js');
13 let str = "this is 'index' module"
14 console.log(aModule);// {} -- 一個空對象

至於為什麼不能這麼寫,暫時不在這裏闡述,下一節關於nodejs模塊底層實現會具體的分析介紹,這裏先來介紹nodejs模塊的一個設計思想。

1.2 nodejs模塊的開閉原則設計實現

1 //a.js -- 導出模塊
2 let num = 123;
3 let str = "this is module 'a'";
4 exports.a = a;
5 
6 //index.js -- 引用模塊a
7 let aModule = require('./a.js');
8 console.log(aModule.num);//123
9 console.log(aModule.str);//undefined

這裏你會發現只有被exports執行了導出的num成員才能被正常導出,而str成員沒有被執行導出,在依賴a.js模塊的index.js中是不能引用到a.js模塊中的str成員。可能你會說這不是很正常嗎?都沒有導出怎麼引用呢?

不錯,這是一個非常正常情況,因為語法就告訴了我們,要想引用一個模塊的成員就必須先在被引用的模塊中導出該成員。然而這裏要討論的當然不會是導出與引用這個問題,而是模塊給我實現了一個非常友好的設計,假設我現在在a.js中有成員str,在index.js模塊中也有成員str,這回衝突嗎?顯然是不會的,即使在a.js中導出str並且在index.js中引用a.js模塊,因為index.js要使用a.js模塊的成員str,需要使用接收模塊變量aModule.str來使用。

 1 //a.js
 2 let num = 123;
 3 let str = "this is module 'a'";
 4 exports.num = num;
 5 exports.str = str;
 6 
 7 //index.js
 8 let aModule = require('./a.js');
 9 let str = "this is module 'index'"
10 console.log(aModule.num);//123
11 console.log(aModule.str);//this is module 'a'
12 console.log(str);//this is module 'index'

基於開閉原則的設計方式,封閉可以讓模塊的內部實現隱藏起來,開放又可以友好的實現模塊之間的相互依賴,這相對於之前我們常用的回調函數解決方案,程序設計變得更清晰,代碼復用變得更靈活,更關鍵的是還解決了js中一個非常棘手的問題——命名衝突問題,上面的示例就是最好的證明。這裏需要拋出一個問題,看示例:

1 //下面這種寫法有什麼問題?
2 //a.js
3 let num = 123;
4 module.exports = num;
5 
6 //index.js
7 let aModule = require('./a.js');
8 let str = "this is module 'index'"
9 console.log(aModule);//123

這種寫法不會報錯,也能正常達到目前的需求,如果從能解決目前的功能需求角度來說,它沒錯。但是開閉原則的重要思想就是讓模塊保持相對封閉,又有更好的拓展性,這樣寫顯然不合適,比如就上面的代碼寫完上線以後,業務又出現了一個新的需求需要a.js模塊導出一個成員str,這時候顯然需要同時更改a.js模塊和index.js模塊,即使新需求不需要index.js來實現也是需要改的。所以維持模塊的開閉原則是良好的編碼風格。

 二、nodejs模塊的底層實現原理

2.1 module.exports與exports的區別:

//a.js
console.log(module.exports == exports);//true

//然後在控制台直接執行a.js模塊
node a.js

實際上它們是沒有區別的,那為什麼在之前的exports不能直接等於一個對象,而module.exports可以呢?這關乎於js的引用值指向問題:

 

 當export被賦值一個對象時,就發生了一下變化:

這時候我們可以確定node不會導出exports,因為前面的示例已經說明了這一點,但是值得我們繼續思考的是,node模塊是依據module.exports、exports、還是它們指向的初始對象呢?這裏你肯定會說是module.exports,因為前面已經有示例是module.exports指向一個新的對象被成功導出,但是我並不覺得前面那些示例能說服我,比如下面這種情況:

 1 //a.js模塊
 2 let num = 123;
 3 function foo(val){
 4     console.log(val);
 5 }
 6 module.exports = {
 7     num:num
 8 }
 9 exports = {
10     foo:foo
11 }
12 //index.js模塊
13 let aModule = require('./a.js');
14 console.log(aModule);//這裡會打印出什麼?

我們現不測試也不猜測,先通過下面的示圖來看下現在的a.js模塊中module.exports、exports、以及它們兩初始指向的空對象的關係圖:

 

 這時候我們來看一下index.js執行會輸出什麼?

{ num: 123 }

所以從這個結果可以看出,最後require()最後導入的是被引用模塊的module.exports。探討到這裏的時候並沒有到達node模塊的終點,我們這裏module.exports、exports、require()是從哪裡來的?node系統內置變量?還是別的?

2.2 node模塊的底層實現原理

這部分的內容其實也沒有太多可以說的,就前面提出來的問題其實有一個方式就可以讓你一目瞭然,只需要在一個js文件中編寫以下代碼,然後使用node執行這個js文件就可以了:

1 console.log(require);      // 一個方法
2 console.log(module);       //  一個對象
3 console.log(exports);      //  一個空對象
4 console.log(__dirname);    //  當前模塊所在路徑
5 console.log(__filename);   //  當前文件的路徑

 這時因為node模塊實際上底層是被放到一個立即執行函數內(不要在乎xyz這個名稱,因為我也不知道node底層到底用的什麼名稱),這些變量其實就是這個函數的參數,這個函數大概是一下形式:

1 function xyz(module.exports,require,module,__filename,__dirname){
2     //...
3     //  這裏就是我們在模塊中寫入的代碼
4     //...
5     return module.exports;
6 }

通過上面的推斷就可以得到下面這樣的結果:

1 console.log(module.exports == arguments[0]);//true
2 console.log(require == arguments[1]);//true
3 console.log(module == arguments[2]);//true
4 console.log(__filename == arguments[3]);//true
5 console.log(__dirname == arguments[4]);//true

通過執行這段打印代碼也確實可以得到這樣的結果,到這裏又有一個值得我們關注的內容,就是每個模塊的module參數:

 1 console.log(module);
 2 Module {
 3     id: '.',//當前模塊的id都是'.',在後面的parent和children裏面的模塊對象上的id就是的對應模塊的filename
 4     exports: {},//這裡是模塊導出對象
 5     parent: null,//這裡是當前模塊被那些模塊引用的模塊對象列表,意思是當前模塊作為那些模塊的父級模塊
 6     filename:'',//這裡是當前文件路徑的絕對路徑
 7     loaded: false,//模塊加載狀態,如果在模塊內部輸出module對象它永遠都會是false,因為只有這個模塊加載完成之後才會被修改成true
 8     children: [
 9         // 這裡是引用模塊module對象列表,意思是當前模塊作為了那些模塊的子模塊
10     ],
11     paths:[ 
12         // 這裡是外部模塊包的路徑列表,從最近的路徑(模塊所在同級路徑)到系統盤路徑所有的node_modules文件夾路徑
13      ] 
14     }

到這裡有可能你還會問為什麼底層實現裏面只有module.exports,沒有export,這個解釋起來真的費勁,下面這一行代碼幫你搞定:

let exports = module.exports;

這篇博客主要介紹了node模塊的內部內容,並未就node模塊基於commonjs規範做任何介紹,是因為在之前的博客中已經有了非常全面的解析,詳細參考博客開始時的連接,關於node模塊加載相關內容也是在那篇博客。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

比亞迪新能源車上海補貼將腰斬 銷量已現大滑坡

兩個月前,比亞迪在上海失去了兩萬元(人民幣,下同)地方補貼,兩個月後,又將失去5000元補貼,仍然在手的只剩5000元, 昨(25)天,比亞迪確認,已經接到上海有關部門的通知,比亞迪新能源汽車在滬補貼將減半,並將成為受補貼「按量退坡」影響的首家新能源汽車企業。  
 
銷量沖4萬,福兮禍兮   在上海收穫了4萬的銷量,對於比亞迪來說,是福,也是禍。   上海市新能源汽車推進辦透露,2014年以來,比亞迪品牌新能源乘用車在上海累計銷量距離4萬輛僅一步之遙。按照相關政策,如累計銷量達到4萬輛以上,上海市地方補貼將降至每輛5000元,較目前減半。部分消費者因擔心比亞迪新能源汽車實際購車價提高而轉向享受更高補貼的其他品牌新能源汽車。  
公司是否貼補看市場反應   從6月份開始,比亞迪為了挽救主力車型「秦」在上海市場的銷量,採取廠家和經銷商聯合補貼1.4萬元,以補齊無法拿到政府1.4萬元額外補貼的差價。不過,比亞迪6月初的補貼政策7月底即將到期,到期後,比亞迪是否會出臺力度更大的補貼,挽回價格上的不利?昨天,比亞迪公關部相關人士透露,目前還在商討,具體的市場政策要看市場反應。  
今年上海銷量已現大滑坡   上海補貼退坡已導致比亞迪在上海市場一蹶不振。今年以來,比亞迪銷量呈現直線下滑,市場份額也被上汽取代。去年上海的插電混動市場上,比亞迪幾乎是一家獨大,在上海的銷量超越大本營深圳。而今年4月以後,隨著上海插電式混動汽車准入技術門檻的提高,比亞迪的表現疲軟。   上海的疲態拖累比亞迪「秦」全國銷量大跌,今年上半年“秦”僅賣出9404輛,不足萬輛的成績相較其去年同期的1.6萬輛,同比大跌42.9%。另一款新能源車型「秦」EV也只賣出1725輛。 

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

吉利擬13.46億元拋售康迪與知豆股份 公告解釋四大原因

7月25日,吉利汽車發佈公告稱,與吉利控股訂立總體出售協議,將以總價人民幣13.46億元轉讓旗下康迪50%、知豆45%兩家合資公司的股份。  
  吉利汽車是第二次發公告出售知豆股份,此前公司已與一名獨立協力廠商投資者簽署框架協定,但由於有關訂約方未能就擬定出售條件達成協議,故該出售事項未落實。出售康迪股份則是首次提及。儘管是左手轉右手,但從公告透露的轉讓原因來看,不排除再從吉利控股轉出康迪、知豆股份的可能性。   一、
專注高端提高品牌形象。康迪和知豆主要生產微型純電動汽車,吉利汽車認為這兩家公司生產的電動 汽車相對低端、售價低廉,且該電動汽車一般速度較低,充電範圍較狹窄,技術較低端。   二、
缺乏控制權和影響力。吉利汽車在公告中提及,康迪和知豆都是合營公司,合營公司的經營策略必須 由吉利汽車和其他投資方共同決定,根據吉利汽車原先掌握的股份,這就意味著吉利汽車對這兩家公司的日常管理並沒有擁有大部分的控制權及大範圍的影響力。   三、
虧損過大。康迪今年一季度淨利虧損約4871萬元,知豆同期虧損約8887萬元。   四、
新能源政策生變。近期中國政府發佈有關補貼資格和免稅的政策會對康迪和知豆旗下的產品組合不利。   文章來源:第一電動網

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

全球電動車市場加溫 鋰電池原料價格飆漲

根據 《日本經濟新聞》 的報導,由於全世界快速發展環保電動車產業的緣故,使得電動車中重要的零組件-鋰電池,其主要的元素稀有金屬 「鋰」,1 年來的國際價格急劇上漲,僅短短1 年的時間,「鋰」 的價格就暴漲3 倍。不但,使得全球主要供應商開啟新產線,以滿足市場的需求之外,預估供給不足的情況也將持續到2019 至2020 年後。

報導中指出,稀有金屬 「鋰」 被廣泛用於生産環保車的充電電池。由於全球性的電動環保車增産,因此針對環保車電池的需求急劇增加。隨著國際 「鋰」 價格的高漲,包括以生產電動環保車電池為主的日本市場,其國內交易價格也呈上漲態勢。

報導中分析,從「鋰」的消費量觀察,中國佔全球市場的40% ,為世界最大需求國。這也使得中國國內的 「鋰」 現貨價格成為國際價格指標之一。這一現貨價格在2016 年初小幅下跌之後就一路大漲,到7 月中旬的價格為1 噸人民幣12.9 萬元左右(折合新台幣約61.43 萬元),達到1 年前價格的3 倍。

至於,中國的 「鋰」 需求量的快速增加,則是反映了中國為了改善日益嚴重的空氣污染,正加快普及純電動汽車 (EV) 和插電式混合動力車 (PHV) 的趨勢。除了消費者購買電動環保車可獲得政府補貼之外,政府還積極推廣搭載鋰電池公共汽車,這使得中國車載電池需要的 「鋰」 採購量因此大幅增加。

而除了中國之外,美國電動車廠商特斯拉 (TESLA) 的需求成長,也是 「鋰」 價格高漲的原因之一。日前,TESLA 預定於2017 年供貨的 「Model3」 電動車預售熱絡,造成鋰電池供應不足的情況。目前,為TESLA 供應車載電池的松下 (Panasonic) ,日前決定提前啟動與TESLA 在美國設立的車載電池工廠生産,計劃在2016 年底前啟動量産。

目前,「鋰」 供不應求的狀況,也使得 「鋰」 的主要供應商智利的SQM 、美國FMC 、美國雅保化工 (Albemarle) ,以及一部分中國企業開始計劃今後在北美和澳大利亞等地新設生産線。不過,即使如此,仍有不少業界人士認為,供給不足的狀況也將持續到2019 至2020 年。

根據統計,2015 年全球的「鋰」(以碳酸鋰來換算)總需求為17 萬噸。其中,鋰電池的生產需求6 萬噸。預計到2020 年時,全球總需求將提高至28 萬噸,而針對鋰電池的生產需求,將增加到16.5 萬噸。

根據日本獨立行政法人 「石油天然氣金屬礦物資源機構」(JOGMEC) 統計,在電池成本中,「鋰」 僅佔不到10% 。因此,對最終産品價格的影響有限。在日本國內,目前鋰電池的主要材料廠商尚未能徹底將原料價格的上漲轉嫁到産品價格中。不過,除鋰電池以外的工業用途,「鋰」 目前也正陷入短缺的情況。未來的價格波動,恐將在所難免。

(本文授權轉載自《》──〈〉)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

ABB超級電容「閃充」技術,在美獲首筆電動巴士訂單

充電慢、交換電池麻煩,這是全電動車的兩難,尤其是若要發展大眾運輸,全電動公車可不能總是停在路邊充電,為了解決這個問題,機電大廠ABB 推出以超級電容(Supercapacitors)「閃充」技術,如今已經接到第一筆訂單。

2016 年7 月中,美國政府期望推動讓未來的電動車能在10 分鐘內充電完成,不過,其實不用等到未來,ABB 現有的技術就已經讓10 分鐘看起來顯得落伍,因為超級電容可以600kW,在15 秒內閃充,提供電動公車行駛到下一個充電站的電力,而若是需完全充飽電池,也只需要幾分鐘。ABB 已經小規模測試此技術數年。

如今,ABB 接到第一筆商業訂單,來自於公車營運商Tosa,將於日內瓦市郊到機場的公車路線上行駛。這款全電動公車行駛時與一般公車無異,不過總共50 個公車站中,有13 個公車站是充電站,當公車進站時,車頂上會伸出接收器,與車站的充電裝置接觸,在15 秒內閃充,取得可行駛到下一個充電站的電力,而在公車總站,則有200kW充電器,以3~5 分鐘時間將電池完全充飽。

充電站採用超級電容,超級電容的能源密度雖然不如鋰電池,但可緩緩充能,於短時間內一次釋放,除了縮短電動公車的充電時間,使得公車能在靠站時閃充以外,也能減輕電網負擔,因為用電量是平均分攤在緩緩充能的階段,而不是一接上充電座時就突然大增電力需求,充完又需求突降,造成電網調度上的困擾。另一方面,由於分散了負擔,整個充電站可以用較低成本的低電流規劃打造。

這種方式也利於應用太陽能,公車站可設置太陽能發電,為超級電容緩緩充能,充電時間之中萬一有雲飄過,一時中斷供電,也不會產生太大影響。而由於公車班次最多時間是在白天,因此太陽能可發揮相當效用。

ABB 先前將超級電容應用於電車煞車回電,2013 年起,ABB 與Tosa 測試超級電容應用於全電動公車,目前測試結果,其成本已經與柴油車相當,未來隨著相關技術成熟,電池價格進一步下降,將有可能比柴油車更便宜,除了價格以外,全電動公車還有無碳排放、無廢氣空氣污染、噪音低的好處,有助於改善市區生活品質。

這款全電動巴士預定於2018 年全面營運。

來源:

(本文授權轉載自《》──〈〉。圖片來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

電動車供應鏈需求強,台達電、貿聯-KY忙翻

美國電動車廠商特斯拉(Tesla)、德國BMW接連提高電動車零組件的訂單,使中上游供應鏈廠商忙著接單。台灣台達電、貿聯-KY等特斯拉供貨廠商表示接單狀況良好,而台達電也透露可望與BMW達成供貨合約。

《經濟日報》報導,各國積極發展電動車,帶動了電動車產業鏈的興盛。台達電已通過歐、美、日、中等地的電動車認證標準,目前已有歐美合作廠商,未來在電動車業界的發展可期。由於台達電將於第三季起出貨北美油電混和車所需的零組件,因此台達電第三季的獲利十分看好。

在與特斯拉的合作方面,台達電一直都是Model S、Model X的電力控制系統、電池管理系統的供應商。針對特斯拉所提高的訂單需求,據了解,特斯拉已要求台達電備妥目前三至五倍的產能。另一家台系上游廠商貿聯-KY也接訂單忙翻天。

而在與BMW的合作方面,BMW將在泰國投資20億泰銖興建電動車用電池工廠,最快在2017年中動工。報導指出,台達電已與BMW達成共識,未來將為BMW供應電源控制系統,主要市場為東協。

台達電董事長海英俊曾於法說會上表示,汽車產業對台達電而言十分重要,也看好未來汽車相關應用的發展。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整