【深度學習】Cifar-10-探究不同的改進策略對分類準確率提高

cifar10數據集上進行圖片分類,基于tensorflow框架,

旨在探究不同的改進策略對分類準確率的影響,如何一步步得提高準確率?

?

一、問題描述

當我們在處理圖像識別或者圖像分類或者其他機器學習任務的時候,我們總是迷茫于做出哪些改進能夠提升模型的性能(識別率、分類準確率)。。。或者說我們在漫長而苦惱的調參過程中到底調的是哪些參數。。。所以,我花了一部分時間在公開數據集CIFAR-10 [1] 上進行探索,來總結出一套方法能夠快速高效并且有目的性地進行網絡訓練和參數調整。

CIFAR-10數據集有60000張圖片,每張圖片均為分辨率為32*32的彩色圖片(分為RGB3個信道)。CIFAR-10的分類任務是將每張圖片分成青蛙、卡車、飛機等10個類別中的一個類別。本文主要使用基于卷積神經網絡的方法(CNN)來設計模型,完成分類任務。

首先,為了能夠在訓練網絡的同時能夠檢測網絡的性能,我對數據集進行了訓練集/驗證集/測試集的劃分。訓練集主要用戶進行模型訓練,驗證集主要進行參數調整,測試集主要進行模型性能的評估。因此,我將60000個樣本的數據集分成了,45000個樣本作為訓練集,5000個樣本作為驗證集,10000個樣本作為測試集。接下來,我們一步步來分析,如果進行模型設計和改進。

?

二、搭建最簡單版本的CNN

對于任何的機器學習問題,我們一上來肯定是采用最簡單的模型,一方面能夠快速地run一個模型,以了解這個任務的難度,另一方面能夠有一個baseline版本的模型,利于進行對比實驗。所以,我按照以往經驗和網友的推薦,設計了以下的模型。


模型的輸入數據是網絡的輸入是一個4維tensor,尺寸為(128, 32, 32, 3),分別表示一批圖片的個數128、圖片的寬的像素點個數32、高的像素點個數32和信道個數3。首先使用多個卷積神經網絡層進行圖像的特征提取,卷積神經網絡層的計算過程如下步驟:

  1. 卷積層1:卷積核大小3*3,卷積核移動步長1,卷積核個數64,池化大小2*2,池化步長2,池化類型為最大池化,激活函數ReLU。
  2. 卷積層2:卷積核大小3*3,卷積核移動步長1,卷積核個數128,池化大小2*2,池化步長2,池化類型為最大池化,激活函數ReLU。
  3. 卷積層3:卷積核大小3*3,卷積核移動步長1,卷積核個數256,池化大小2*2,池化步長2,池化類型為最大池化,激活函數ReLU。
  4. 全連接層:隱藏層單元數1024,激活函數ReLU。
  5. 分類層:隱藏層單元數10,激活函數softmax。

參數初始化,所有權重矩陣使用random_normal(0.0, 0.001),所有偏置向量使用constant(0.0)。使用cross entropy作為目標函數,使用Adam梯度下降法進行參數更新,學習率設為固定值0.001。


該網絡是一個有三層卷積層的神經網絡,能夠快速地完成圖像地特征提取。全連接層用于將圖像特征整合成分類特征,分類層用于分類。cross entropy也是最常用的目標函數之一,分類任務使用cross entropy作為目標函數非常適合。Adam梯度下降法也是現在非常流行的梯度下降法的改進方法之一,學習率過大會導致模型難以找到較優解,設置過小則會降低模型訓練效率,因此選擇適中的0.001。這樣,我們最基礎版本的CNN模型就已經搭建好了,接下來進行訓練和測試以觀察結果。

訓練5000輪,觀察到loss變化曲線、訓練集準確率變化曲線和驗證集準確率變化曲線如下圖。測試集準確率為69.36%

結果分析:首先我們觀察訓練loss(目標函數值)變化,剛開始loss從200不斷減小到接近0,但是在100輪左右開始出現震蕩,并且隨著訓練幅度越來越大,說明模型不穩定。然后觀察訓練集和驗證集的準確率,發現訓練集準確率接近于1,驗證集準確率穩定在70%左右,說明模型的泛化能力不強并且出現了過擬合情況。最后評估測試集,發現準確率為69.36%,也沒有達到很滿意的程度,說明我們對模型需要進行很大的改進,接下來進行漫長的調參之旅吧!

?

三、數據增強有很大的作用

使用數據增強技術(data augmentation),主要是在訓練數據上增加微小的擾動或者變化,一方面可以增加訓練數據,從而提升模型的泛化能力,另一方面可以增加噪聲數據,從而增強模型的魯棒性。主要的數據增強方法有:翻轉變換 flip、隨機修剪(random crop)、色彩抖動(color jittering)、平移變換(shift)、尺度變換(scale)、對比度變換(contrast)、噪聲擾動(noise)、旋轉變換/反射變換 (rotation/reflection)等,可以參考Keras的官方文檔 [2] 。獲取一個batch的訓練數據,進行數據增強步驟之后再送入網絡進行訓練。


我主要做的數據增強操作有如下方面:

  1. 圖像切割:生成比圖像尺寸小一些的矩形框,對圖像進行隨機的切割,最終以矩形框內的圖像作為訓練數據。
  2. 圖像翻轉:對圖像進行左右翻轉。
  3. 圖像白化:對圖像進行白化操作,即將圖像本身歸一化成Gaussian(0,1)分布。

為了進行對比實驗,觀測不同數據增強方法的性能,實驗1只進行圖像切割,實驗2只進行圖像翻轉,實驗3只進行圖像白化,實驗4同時進行這三種數據增強方法,同樣訓練5000輪,觀察到loss變化曲線、訓練集準確率變化曲線和驗證集準確率變化曲線對比如下圖。

結果分析:我們觀察訓練曲線和驗證曲線,很明顯地發現圖像白化的效果好,其次是圖像切割,再次是圖像翻轉,而如果同時使用這三種數據增強技術,不僅能使訓練過程的loss更穩定,而且能使驗證集的準確率提升至82%左右,提升效果十分明顯。而對于測試集,準確率也提升至80.42%。說明圖像增強確實通過增加訓練集數據量達到了提升模型泛化能力以及魯棒性的效果,從準確率上看也帶來了將近10%左右的提升,因此,數據增強確實有很大的作用。但是對于80%左右的識別準確率我們還是不夠滿意,接下來繼續調參。

?

四、從模型入手,使用一些改進方法

接下來的步驟是從模型角度進行一些改進,這方面的改進是誕生論文的重要區域,由于某一個特定問題對某一個模型的改進千變萬化,沒有辦法全部去嘗試,因此一般會實驗一些general的方法,比如批正則化(batch normalization)、權重衰減(weight decay)。我這里實驗了4種改進方法,接下來依次介紹。

  1. 權重衰減(weight decay):對于目標函數加入正則化項,限制權重參數的個數,這是一種防止過擬合的方法,這個方法其實就是機器學習中的l2正則化方法,只不過在神經網絡中舊瓶裝新酒改名為weight decay [3]。
  2. dropout:在每次訓練的時候,讓某些的特征檢測器停過工作,即讓神經元以一定的概率不被激活,這樣可以防止過擬合,提高泛化能力 [4]。
  3. 批正則化(batch normalization):batch normalization對神經網絡的每一層的輸入數據都進行正則化處理,這樣有利于讓數據的分布更加均勻,不會出現所有數據都會導致神經元的激活,或者所有數據都不會導致神經元的激活,這是一種數據標準化方法,能夠提升模型的擬合能力 [5]。
  4. LRN:LRN層模仿生物神經系統的側抑制機制,對局部神經元的活動創建競爭機制,使得響應比較大的值相對更大,提高模型泛化能力。

為了進行對比實驗,實驗1只使用權重衰減,實驗2使用權重衰減+dropout,實驗3使用權重衰減+dropout+批正則化,實驗4使用權重衰減+dropout+批正則化+LRN,同樣都訓練5000輪,觀察到loss變化曲線、訓練集準確率變化曲線和驗證集準確率變化曲線對比如下圖。

結果分析:我們觀察訓練曲線和驗證曲線,隨著每一個模型提升的方法,都會使訓練集誤差和驗證集準確率有所提升,其中,批正則化技術和dropout技術帶來的提升非常明顯,而如果同時使用這些模型提升技術,會使驗證集的準確率從82%左右提升至88%左右,提升效果十分明顯。而對于測試集,準確率也提升至85.72%。我們再注意看左圖,使用batch normalization之后,loss曲線不再像之前會出現先下降后上升的情況,而是一直下降,這說明batch normalization技術可以加強模型訓練的穩定性,并且能夠很大程度地提升模型泛化能力。所以,如果能提出一種模型改進技術并且從原理上解釋同時也使其適用于各種模型,那么就是非常好的創新點,也是我想挑戰的方向。現在測試集準確率提升至85%左右,接下來我們從其他的角度進行調參。

?

五、變化的學習率,進一步提升模型性能

在很多關于神經網絡的論文中,都采用了變化學習率的技術來提升模型性能,大致的想法是這樣的:

  1. 首先使用較大的學習率進行訓練,觀察目標函數值和驗證集準確率的收斂曲線。
  2. 如果目標函數值下降速度和驗證集準確率上升速度出現減緩時,減小學習率。
  3. 循環步驟2,直到減小學習率也不會影響目標函數下降或驗證集準確率上升為止。

為了進行對比實驗,實驗1只使用0.01的學習率訓練,實驗2前10000個batch使用0.01的學習率,10000個batch之后學習率降到0.001,實驗3前10000個batch使用0.01的學習率,10000~20000個batch使用0.001的學習率,20000個batch之后學習率降到0.0005。同樣都訓練5000輪,觀察到loss變化曲線、訓練集準確率變化曲線和驗證集準確率變化曲線對比如下圖。

結果分析:我們觀察到,當10000個batch時,學習率從0.01降到0.001時,目標函數值有明顯的下降,驗證集準確率有明顯的提升,而當20000個batch時,學習率從0.001降到0.0005時,目標函數值沒有明顯的下降,但是驗證集準確率有一定的提升,而對于測試集,準確率也提升至86.24%。這說明,學習率的變化確實能夠提升模型的擬合能力,從而提升準確率。學習率在什么時候進行衰減、率減多少也需要進行多次嘗試。一般在模型基本成型之后,使用這種變化的學習率的方法,以獲取一定的改進,精益求精。

?

六、加深網絡層數,會發生什么事情?

現在深度學習大熱,所以,在計算資源足夠的情況下,想要獲得模型性能的提升,大家最常見打的想法就是增加網絡的深度,讓深度神經網絡來解決問題,但是簡單的網絡堆疊不一定就能達到很好地效果,抱著深度學習的想法,我按照plain-cnn模型 [6],我做了接下來的實驗。

  1. 卷積層1:卷積核大小3*3,卷積核移動步長1,卷積核個數16,激活函數ReLU,使用batch_normal和weight_decay,接下來的n層,卷積核大小3*3,卷積核移動步長1,卷積核個數16,激活函數ReLU,使用batch_normal和weight_decay。
  2. 卷積層2:卷積核大小3*3,卷積核移動步長2,卷積核個數32,激活函數ReLU,使用batch_normal和weight_decay,接下來的n層,卷積核大小3*3,卷積核移動步長1,卷積核個數32,激活函數ReLU,使用batch_normal和weight_decay。
  3. 卷積層3:卷積核大小3*3,卷積核移動步長2,卷積核個數64,激活函數ReLU,使用batch_normal和weight_decay,接下來的n層,卷積核大小3*3,卷積核移動步長1,卷積核個數64,激活函數ReLU,使用batch_normal和weight_decay。
  4. 池化層:使用全局池化,對64個隱藏單元分別進行全局池化。
  5. 全連接層:隱藏層單元數10,激活函數softmax,使用batch_normal和weight_decay。

為了進行對比實驗,進行4組實驗,每組的網絡層數分別設置8,14,20和32。同樣都訓練5000輪,觀察到loss變化曲線、訓練集準確率變化曲線和驗證集準確率變化曲線對比如下圖。

結果分析:我們驚訝的發現,加深了網絡層數之后,性能反而下降了,達不到原來的驗證集準確率,網絡層數從8層增加到14層,準確率有所上升,但從14層增加到20層再增加到32層,準確率不升反降,這說明如果網絡層數過大,由于梯度衰減的原因,導致網絡性能下降,因此,需要使用其他方法解決梯度衰減問題,使得深度神經網絡能夠正常work。

?

七、終極武器,殘差網絡

2015年,Microsoft用殘差網絡 [7] 拿下了當年的ImageNet,這個殘差網絡就很好地解決了梯度衰減的問題,使得深度神經網絡能夠正常work。由于網絡層數加深,誤差反傳的過程中會使梯度不斷地衰減,而通過跨層的直連邊,可以使誤差在反傳的過程中減少衰減,使得深層次的網絡可以成功訓練,具體的過程可以參見其論文[7]。

通過設置對比實驗,觀察殘差網絡的性能,進行4組實驗,每組的網絡層數分別設置20,32,44和56。觀察到loss變化曲線和驗證集準確率變化曲線對比如下圖。

同的改進策略對分類準確率的影響,如何一步步得提高準確率。

?

代碼:

import numpy as np
# 序列化和反序列化
import pickle
from sklearn.preprocessing import OneHotEncoder
import warnings
warnings.filterwarnings('ignore')
import tensorflow as tf#數據加載def unpickle(file):import picklewith open(file, 'rb') as fo:dict = pickle.load(fo, encoding='ISO-8859-1')return dict
labels = []
X_train = []
for i in range(1,6):data = unpickle('./cifar-10-batches-py/data_batch_%d'%(i))labels.append(data['labels'])X_train.append(data['data'])
# 將list類型轉換為ndarray
X_train = np.array(X_train)X_train = np.transpose(X_train.reshape(-1,3,32,32),[0,2,3,1]).reshape(-1,3072)y_train = np.array(labels).reshape(-1)# reshape
X_train = X_train.reshape(-1,3072)# 目標值概率
one_hot = OneHotEncoder()
y_train =one_hot.fit_transform(y_train.reshape(-1,1)).toarray()# 測試數據加載
test = unpickle('./cifar-10-batches-py/test_batch')
X_test = test['data']
X_test = np.transpose(X_test.reshape(-1,3,32,32),[0,2,3,1]).reshape(-1,3072)
y_test = one_hot.transform(np.array(test['labels']).reshape(-1,1)).toarray()# 從總數據中獲取一批數據
index = 0
def next_batch(X,y):global indexbatch_X = X[index*128:(index+1)*128]batch_y = y[index*128:(index+1)*128]index+=1if index == 390:index = 0return batch_X,batch_y# 構建神經網絡X = tf.placeholder(dtype=tf.float32,shape = [None,3072])
y = tf.placeholder(dtype=tf.float32,shape = [None,10])
kp = tf.placeholder(dtype=tf.float32)### !!!變量
def gen_v(shape,std = 5e-2):return tf.Variable(tf.truncated_normal(shape = shape,stddev=std))def conv(input_,filter_,b):conv = tf.nn.conv2d(input_,filter_,strides=[1,1,1,1],padding='SAME') + bconv = tf.layers.batch_normalization(conv,training=True)conv = tf.nn.relu(conv)return tf.nn.max_pool(conv,[1,3,3,1],[1,2,2,1],'SAME')def net_work(X,kp):
#     形狀改變,4維input_ = tf.reshape(X,shape = [-1,32,32,3])
#     第一層filter1 = gen_v(shape = [3,3,3,64])b1 = gen_v(shape = [64])pool1 = conv(input_,filter1,b1)#     第二層filter2 = gen_v([3,3,64,128])b2 = gen_v(shape = [128])pool2 = conv(pool1,filter2,b2)#     第三層filter3 = gen_v([3,3,128,256])b3 = gen_v([256])pool3 = conv(pool2,filter3,b3)#     第一層全連接層dense = tf.reshape(pool3,shape = [-1,4*4*256])fc1_w = gen_v(shape = [4*4*256,1024])fc1_b = gen_v([1024])bn_fc_1 = tf.layers.batch_normalization(tf.matmul(dense,fc1_w) + fc1_b,training=True)relu_fc_1 = tf.nn.relu(bn_fc_1)
#     fc1.shape = [-1,1024]#     dropoutdp = tf.nn.dropout(relu_fc_1,keep_prob=kp)#     fc2 輸出層out_w = gen_v(shape = [1024,10])out_b = gen_v(shape = [10])out = tf.matmul(dp,out_w) + out_breturn out# 損失函數準確率&最優化out = net_work(X,kp)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y,logits=out))
# 準確率
y_ = tf.nn.softmax(out)
# equal 相當于 == 
equal = tf.equal(tf.argmax(y,axis = -1),tf.argmax(y_,axis = 1))
accuracy = tf.reduce_mean(tf.cast(equal,tf.float32))opt = tf.train.AdamOptimizer(0.01).minimize(loss)
opt# 開啟訓練saver = tf.train.Saver()# config = tf.ConfigProto(allow_soft_placement=True)
# config.gpu_options.allocator_type = 'BFC'
# config.gpu_options.per_process_gpu_memory_fraction = 0.80epoches = 100
with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in range(epoches):batch_X,batch_y = next_batch(X_train,y_train)opt_,loss_ ,score_train= sess.run([opt,loss,accuracy],feed_dict = {X:batch_X,y:batch_y,kp:0.5})print('iter count:%d。mini_batch loss:%0.4f。訓練數據上的準確率:%0.4f。測試數據上準確率:...'%(i+1,loss_,score_train ))if score_train > 0.6:saver.save(sess,'./model/estimator',i+1)saver.save(sess,'./model/estimator',i+1)for i in range(77):X_test1,y_test1=  next_batch(X_test,y_test)score_test = sess.run([accuracy],feed_dict = {X:X_test1,y:y_test1,kp:1.0})print('測試數據上的準確率:',score_test,y_[0],y[0])epoches = 1100
with tf.Session() as sess:saver.restore(sess,'./model/estimator-100')for i in range(100,epoches):batch_X,batch_y = next_batch(X_train,y_train)opt_,loss_ ,score_train= sess.run([opt,loss,accuracy],feed_dict = {X:batch_X,y:batch_y,kp:0.5})print('iter count:%d。mini_batch loss:%0.4f。訓練數據上的準確率:%0.4f。測試數據上準確率:%0.4f'%(i+1,loss_,score_train,score_test))if score_train > 0.6:saver.save(sess,'./model/estimator',i+1)saver.save(sess,'./model/estimator',i+1)if (i%100 == 0) and (i != 100):score_test = sess.run(accuracy,feed_dict = {X:X_test,y:y_test,kp:1.0})print('----------------測試數據上的準確率:---------------',score_test)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456012.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Acer 4750 安裝黑蘋果_黑蘋果 MacOS 10.15 Catalina安裝教程

一、準備工作一個8G以上的U盤(安裝 10.15 Catalina 必須要16G及以上的U盤 );Mac OS鏡像、TransMac(刻錄工具)、DiskGenius(分區工具)、EasyUEFI(引導工區)、EFI驅動文件。安裝工具獲取方式:關注公眾號【遠景論壇】,回復:黑蘋果二、…

幀內16*16模式的宏塊數據傳輸順序

如果宏塊以16*16幀內模式編碼,那么塊-1首先被傳輸,攜帶的信息是每個4*4亮度塊的DC系數。然后,亮度殘差塊0-15被傳輸(此時,16*16幀內宏塊的DC系數為零)。對于亮度分量Cb和Cr,16和17塊攜帶DC系數的…

ceph中查看一個rbd的image的真實存儲位置

1、新建一個image存儲 rbd create hzb-mysql --size 2048 2、查看hzb-mysql的所有對象 一個rbd image實際上包含了多個對象(默認情況下是image_size/4M) [rootcc ~]# rbd info hzb-mysql rbd image hzb-mysql:size 2048 MB in 512 objectsorder 22 (4096…

python中的shutil模塊

shutil模塊 引入: import shutil copy() 功能:復制文件 格式:shutil.copy(來源文件,目標地址) 返回值:復制之后的路徑copy2() 功能:復制文件,保留元數據 格式:shutil.copy2(來源文件,目標地址…

亞馬遜低調收購Biba 或下月發布視頻消息服務

北京時間11月24日消息,據外媒報道,收購Twitch和Elemental Technologies似乎只是亞馬遜通過收購深耕視頻服務市場戰略的兩個元素。去年,亞馬遜還低調收購了創業公司Biba Systems,后者開發和運營面向企業用戶的視頻消息應用。消息人…

【tensorflow】static_rnn與dynamic_rnn的區別

static_rnn和dynamic_rnn的區別主要在于實現不同。 static_rnn會把RNN展平,用空間換時間。 gpu會吃不消(個人測試結果) dynamic_rnn則是使用for或者while循環。 調用static_rnn實際上是生成了rnn按時間序列展開之后的圖。打開tensorboard你…

pcie1 4 速度_太陽系行星們誰轉得最快?八大行星自轉速度排行榜,地球排第五...

不知道大家有沒有玩兒過陀螺呢?玩兒陀螺的技術如果很好的話,它可以在地上飛快地旋轉并且能夠旋轉很長的時間。有趣的是,宇宙中的很多星球就像陀螺一樣繞著一個中心軸旋轉著。這就是星球的自轉。在太陽系中有八顆大行星,它們都在自…

python中時間模塊

時間日期相關的模塊 calendar 日歷模塊time   時間模塊datetime 日期時間模塊timeit   時間檢測模塊 日歷模塊 calendar() 功能:獲取指定年份的日歷字符串 格式:calendar.calendar(年份,w2,l1,c6,m3) 返回值&…

硬盤接口詳細解釋

硬盤是電腦主要的存儲媒介之一,由一個或者多個鋁制或者玻璃制的碟片組成。碟片外覆蓋有鐵磁性材料。硬盤有固態硬盤(SSD 盤,新式硬盤)、機械硬盤(HDD 傳統硬盤)、混合硬盤(HHD 一塊基于傳統機械…

【Keras】30 秒上手 Keras+實例對mnist手寫數字進行識別準確率達99%以上

本文我們將學習使用Keras一步一步搭建一個卷積神經網絡。具體來說,我們將使用卷積神經網絡對手寫數字(MNIST數據集)進行識別,并達到99%以上的正確率。 為什么選擇Keras呢? 主要是因為簡單方便。更多細節請看:https://keras.io/ …

分布式資本沈波:未來區塊鏈殺手級應用將出現在“+區塊鏈”

雷鋒網5月22日報道,日前“區塊鏈技術和應用峰會”在杭州國際博覽中心舉行。會上,分布式資本創始管理人沈波作了《區塊鏈的投資現狀與發展趨勢》演講。 沈波表示,由于區塊鏈的共識機制和無法篡改兩大特點,它在各行各業皆有應用潛力…

幀間預測小記

幀間預測后,在比特流中會有相應的信息:殘差信息,運動矢量信息,所選的模式。 宏塊的色度分量分辨率是亮度分辨率的一半(Cr和Cb),水平和垂直均一半。色度塊采用和亮度塊一致的分割模式&#xff0…

ImageJ Nikon_科研論文作圖之ImageJ

各位讀者朋友們又見面了,今天給大家介紹一款圖片處理軟件——ImageJ,這是一款免費的科學圖像分析工具,廣泛應用于生物學研究領域。ImageJ軟件能夠對圖像進行縮放、旋轉、扭曲、模糊等處理,也可計算選定區域內分析對象的一系列幾何…

python中面向對象

面向對象 Object Oriented 面向對象的學習: 面向對象的語法(簡單,記憶就可以搞定)面向對象的思想(稍難,需要一定的理解) 面向過程和面向對象的區別 面向過程開發,以函數作為基本結構…

【urllib】url編碼問題簡述

對url編解碼總結 需要用到urllib庫中的parse模塊 import urllib.parse # Python3 url編碼 print(urllib.parse.quote("天天")) # Python3 url解碼 print(urllib.parse.unquote("%E5%A4%E5%A4%")) urlparse() # urllib.parse.urlparse(urlstring,scheme,…

冷知識 —— 地理

西安1980坐標系: 1978 年 4 月在西安召開全國天文大地網平差會議,確定重新定位,建立我國新的坐標系。為此有了 1980 國家大地坐標系。1980 國家大地坐標系采用地球橢球基本參數為 1975 年國際大地測量與地球物理聯合會第十六屆大會推薦的數據…

獨家| ChinaLedger白碩:區塊鏈中的隱私保護

隱私問題一直是區塊鏈應用落地的障礙問題之一,如何既能滿足監管,又能不侵害數據隱私,是行業都在攻克的問題。那么,到底隱私問題為何難?有什么解決思路,以及實踐創新呢?零知識證明、同態加密等技…

手機處理器排行榜2019_手機處理器AI性能排行榜出爐,高通驍龍第一,華為排在第十名...

↑↑↑擊上方"藍字"關注,每天推送最新科技新聞安兔兔在近日公布了今年四月份Android手機處理器AI性能排行榜,榜單顯示高通驍龍865處理器的AI性能在Android陣營中排在第一名——該處理器的AI性能得分接近46萬分,今年的小米10、三星G…

芯片支持的且會被用到的H.264特性 預測編碼基本原理

視頻壓縮: 1.H.264基本檔次和主要檔次;2.CAVLC熵編碼,即基于上下文的自適應變長編碼;(不支持CABAC,即基于上下文的自適應算術編碼)分辨率:僅用到1080p60,即分辨率為1920*…

MongoDB 數據庫 【總結筆記】

一、MongoDB 概念解析 什么是MongoDB? ? 1、MongoDB是有C語言編寫的,是一個基于分布式文件存儲的開源數據庫系統,在高負載的情況下,添加更多節點,可以保證服務器的性能 ? 2、MongoDB為web應用提供了高性能的數據存儲…