賈揚清分享_深度學習框架caffe

本文轉自:?http://www.datakit.cn/blog/2015/06/12/online_meet_up_with_yangqing_jia.html

http://www.ifight.me/187/

Caffe是一個清晰而高效的深度學習框架,其作者是博士畢業于UC Berkeley的 賈揚清,目前在Google工作。本文是根據機器學習研究會組織的online分享的交流內容,簡單的整理了一下。

講座PPT

目錄

  • 1、caffe分享
    • 1.1、caffe起源
    • 1·2、caffe介紹
    • 1.3、caffe其他方向
  • 2、討論
    • 2.1、caffe算法與結構
    • 2.2、caffe工程與應用
    • 2.3、模型訓練與調參
    • 2.4、caffe與DL的學習與方向
    • 2.5、其他
  • 3、附錄

1、caffe分享

我用的ppt基本上和我們在CVPR上要做的tutorial是類似的,所以大家如果需要更多的內容的話,可以去tutorial.caffe.berkeleyvision.org,也歡迎來參加我們的tutorial。網頁上應該還有一些python的樣例幫助大家上手,所以歡迎參觀。ppt比較長,所以我想我主要就介紹一下背景以及high level的內容,然后更多關注大家有一些什么具體的問題,希望大家覺得OK。slider here

1.1、caffe起源

大家最近一段時間應該已經聽到很多關于deep learning的八卦了,deep learning比較流行的一個原因,主要是因為它能夠自主地從數據上學到有用的feature,特別是對于一些不知道如何設計feature的場合,比如說圖像和speech deep learning可以學習到比以往比如說sift或者MFCC這樣手工設計的feature更好的方法, 而且像slide 4顯示的一樣,這些feature有很強的semantic的含義。所以很多時候在用到其他的一些task的時候會很有效,這也是為什么我們可以用一個feature來實現很多比如說識別,檢測,物體分割這樣的不同task的緣故。

anyway,deep learning其實說回來是個挺久的話題了,Yann Lecun在89年的時候就提出了convolutional Neural Net的idea 然后在手寫數字上獲得了很大的成功。最近deep learning重新受到關注,最大的原因是兩個:

  • 一個是大規模的數據集使得我們可以學習到遠比digit更加復雜的概念
  • 另外一個是大規模并行計算讓我們可以做很快的優化,使得以前我們沒法想象的計算量都變成小case了

所以這些都很美好。但是問題是寫code還挺麻煩的。所以大家肯定希望有個比較好用的框架來很快上手和試試這些deep learning的算法。 所以這就是Caffe了!Caffe是我在Berkeley寫thesis的時候想學習C++和cuda寫的,然后寫完了覺得我自己用太虧了,所以想貢獻給community讓大家來用。所以如果你看見一些寫得很爛的code,不要罵我。

1·2、caffe介紹

caffe的好處是,我們基本上可以用一個比較簡單的語言(google protobuffer)來定義許多網絡結構,然后我們可以在CPU或者GPU上面執行這些代碼,而且cpu和gpu在數學結果上是兼容的。然后,所有的模型和recipe我們都會公布出來,使得我們可以很容易地reproduce互相發布的結果。這也是我感到很幸運的一個地方,大家都很喜歡caffe,也很喜歡分享自己paper里的成果(比如說MIT的place net和VGG的模型)。

anyway,這就是Caffe的簡單介紹了,最開始是一個hobby project,但是最近Berkeley和其他公司比如說NVidia,Yahoo在很認真地maintain它,希望能夠把整個架構做的更好用。

然后我大概講一下caffe的design吧。

基本上,caffe follow了神經網絡的一個簡單假設 - 所有的計算都是以layer的形式表示的layer做的事情就是take一些數據,然后輸出一些計算以后的結果 比如說卷積,就是輸入一個圖像,然后和這一層的參數(filter)做卷積,然后輸出卷積的結果。每一個layer需要做兩個計算:forward是從輸入計算輸出,然后backward是從上面給的gradient來計算相對于輸入的gradient。只要這兩個函數實現了以后,我們就可以把很多層連接成一個網絡,這個網絡做的事情就是輸入我們的數據(圖像或者語音或者whatever),然后來計算我們需要的輸出(比如說識別的label)。只要這兩個函數實現了以后,我們就可以把很多層連接成一個網絡,這個網絡做的事情就是輸入我們的數據(圖像或者語音或者whatever),然后來計算我們需要的輸出(比如說識別的label)。在training的時候,我們可以根據已有的label來計算loss和gradient,然后用gradient來update網絡的參數。這個就是Caffe的一個基本流程!

如果大家需要自己實現一個layer的話,可以參考slide28的格式。比如說輸入是x,我們可以想象一個layer的forward function就是y=f(x) 然后,我們會有一個loss function,記成L(.)。在做backward的時候,網絡得到的是上層給出的gradient,dL/dy,然后網絡需要做的計算是dL/dx = dL/dy * dy/dx,dy/dx也就是f’(x)。于是,這樣我們就可以一層一層往后計算gradient。slide 31簡單介紹了一下這個forward和backward的結構 anyway,Caffe里面實現的solver主要也是為了神經網絡設計的。

在做training的時候,我們一般都會做SGD,就是每次輸入一個小batch,做計算,update參數,然后再輸入下一個batch Caffe也實現了許多實際應用上比簡單SGD要更有效的算法,比如說momentum 和Adagrad (順便插一句,Ilya Sutskever有paper解釋說,momemtum其實已經可以很好地實現quasi second order的優化,所以建議大家可以從momentum sgd開始嘗試做training).

基本上,最簡單地用caffe上手的方法就和slide 35說的一樣。先把數據寫成caffe的格式,然后設計一個網絡,然后用caffe提供的solver來做優化看效果如何。如果你的數據是圖像的話,可以從現有的網絡,比如說alexnet或者googlenet開始,然后做fine tuning。如果你的數據稍有不同,比如說是直接的float vector,你可能需要做一些custom的configuration。caffe的logistic regression example(slide 36)興許會很有幫助。

我在和人聊的時候發現大家都比較喜歡fine tune的方法,所以我也簡單介紹一下。基本上,finetuning的想法就是說,我在imagenet那么大的數據集上train好一個很牛的網絡了,那別的task上肯定也不錯。所以我可以把pretrain的網絡拿過來,然后只重新train最后幾層。重新train的意思是說,比如我以前需要classify imagenet的一千類,現在我只想識別是狗還是貓,或者是不是車牌。于是我就可以把最后一層softmax從一個40961000的分類器變成一個40962的分類器。這個strategy在應用中非常好使,所以我們經常會先在imagenet上pretrain一個網絡,因為我們知道imagenet上training的大概過程會怎么樣。

1.3、caffe其他方向

我覺得算法上主要就是以上這些了,大概再講一下最近一些比較有意思的方向吧。首先是multi-GPU的訓練,caffe有一個Flickr的branch可以用來做multi-GPU,不過目前好像把它merge進master得過程有點慢。不過,如果你有興趣的話,其實multi-GPU不是很難。比如說,用MPI實現一個GPU之間的synchronization,然后把data transfer和computation 并行起來,基本上就可以實現一個比較直接的single machine multi-gpu training了。當然希望flickr的branch盡早merge。

另外,sequence model (RNN, LSTM)也是一個比較熱門的方向,一個比較簡單地實現RNN的方法是unrolling。就是說,我不來實現一個for loop,而是確定地說我的sequence就是一個固定的長度,這樣,整個網絡就依然是一個feed forward的網絡,除了需要一些weight sharing以外,依然是可以用原先的架構來實現的。

另外就是NVidia的cuDNN,NVidia在cuda上做了很多的優化,所以無論大家是用caffe還是實現自己的code,都可以關注一下它。cudnn最近會準備出v3,效果應該比v2還會更快一些。

另外一個比較值得關注的數學計算庫是Eigen,在CPU上的優化還是挺顯著的。Caffe沒有太多地用到Eigen,但是我覺得值得提一下。anyway,我覺得咱們要不還是多留一些時間來討論大家關注的問題,所以我就先打住了,我們Caffe的主要的contributer都在slide 89上,大家都很nice,如果你在CVPR上碰見我們的話歡迎來聊天:)

2、討論

討論部分,這里把一些問題合并,方便查看和閱讀。

2.1、caffe算法與結構

multi-gpu其實是在最近的model,比如說googlenet上,只需要model parallelism就可以了,因為參數的數量很少:)。 caffe內部的Convolution計算是圖像拉伸成向量進行的計算,這種方式會比普通的方法和fft的方法計算更快嗎?放大點說,caffe做了哪些算法上的優化 使得計算速度比較快呢?那個其實是我的weekend hack,所以推薦大家用其他的優化,比如說cudnn等等。說實話寫caffe的時候我沒太關注速度。在神經網絡的訓練過程中,如何能夠并行或者說更快地計算?主要是靠兩點吧,一個是寫更快的code(比如說用cudnn優化convolution),一個是寫并行計算的框架(這方面我推薦用MPI入手,因為MPI雖然沒有fault tolerance等等的好處,但是并行非常簡單,可以作為最開始的測試)。使用gpu對計算性能進行優化,這個更多的是在code層面上調速度了,如果有興趣的話,nvidia的nvprof應該會很有幫助。目前,caffe也有很多的branch,比如對分布式的支持,可以在parallel branch里面找到。

目前dl近幾年在siamese nets distances結構上的進展如何?研究思路如何?” Yann Lecun有paper:Learning a Similarity Metric Discriminatively with Application to Face Verification講這個,值得看看。

dl能實現FFT嗎? facebook其實有fft的code,參見fbfft。facebook是利用了FFT去快速計算,不是我問的意思。用傅立葉變換其實是提取了頻域特征,根據應用的不同,最優的變換不一定是FT,可能是時頻變換、分數階FT等等變換。那么問題就來了:利用深度學習算法,能否學習到最優的時頻特征表出?如果可以,是不是可以把信號處理里面的固定分析方法都扔掉?” 這個我就的確不是專家了,我覺得這個有點類似于model design的問題,深度學習相當于也是設計了一大類的model,然后在這一類model當中尋找最優的,所以如果有一些oracle knowledge(比如說已有的固定分析的經驗)可以知道如何rectify數據,我覺得應該還是有幫助的。

用caffe純粹做分類的話(前向),需要softmax層嗎?看代碼有個pro層和softmax一樣嗎?不是很清楚pro層是哪個,不過也可以用logistic,任何傳統的分類函數應該都是可以的。對于,softmax_layer和softmax_loss_layer的區別,softmax_layer是做softmax變換(就是把輸入的score變成sum to 1的概率值), softmax_loss是計算prediction和true label之間的cross entropy loss function

現在也有用權值不共享的卷積網絡的,請問這個和權值共享網絡分別更適合什么樣的問題?權值不共享的問題是參數太多,所以不是很好控制overfit,一般都是在網絡的后期做locally connected,這對一些問題(比如說face)是個很好地tradeoff,但是還是得實際應用來測試:)

用hdf5layer實現多label的過程不是很清楚,舉個例子說,比如,輸入低分辨圖像,label是高分辨圖像,這種有沒有詳細一點的教程,或者師兄能不能簡單提一下?這個主要就是要設計一個input層能夠輸出不同的top blob,其實caffe在這一點上做的不是很好(因為太關注classification了),可能看一下這些典型的輸入層的實現會有幫助。

caffe能否在多個層都連接loss函數,同時進行反向傳播?可以的,關鍵是要處理好gradient merge的問題,其他都是OK的。caffe實現多層loss反向傳播,即在prototxt里,每一層后加上需要的loss函數,那么caffe最終的反向傳播會是怎樣進行的?應該是這樣的,每一層后面需要一個split層,把這一層的輸入變成兩個blob,一個繼續往下傳播,一個輸入到loss層里面。在backprop的時候,split層會把這兩條路徑的gradient加起來。對于loss是什么了,比如說googlenet用到了幾個branch來inject softmax,所以基本上還是要尋找和問題相關的loss term。

用SGD的時候,收斂充分的前提下,不同的學習率衰減策略是不是結果都差不多?恩,一般會差不多。autoencoder 模型中,單個隱含層和多隱層 模型,效果差別很多啊嗎?這個可能和具體實現有關,隱層多了以后,representation power增加,很可能會提升效果,但是也可能會overfit,所以需要更仔細的training。

2.2、caffe工程與應用

目前Caffe主要面對CV或圖像的任務,但是也可以做nlp。那在移動端用深度學習可以實現實時人臉檢測么?人臉檢測可能目前用傳統方法還是很competitive的,但是做一些識別等等,我覺得目前的移動設備應該是可以支持的。DL也能和傳統特征結合,即傳統特征可以作為feature輸入到網絡里面,然后再繼續做計算。

對于多任務學習的DL有什么經驗可以分享嗎?比如數據分布的均勻性的影響。數據分布均勻性一般都還是挺tricky的,實際操作上一般我覺得cap一些frequency(如果某一類太多了,就downsample一下)會使得training更好一些。

caffe能支持lstm、rnn的訓練嗎?另外,對于百度的dlmc您有什么看法?Jeff Donahue有一個branch可以來做lstm,我自己在refactor的一些code應該也是可以的,但是因為公司review政策的緣故沒法保證什么時候能release :) dmlc我覺得是個挺好的effort,在開源界看到更多中國學生的身影很興奮!

目前deep learning用在小數據集上有什么好的方法嗎?在小數據集的問題上是不是可以通過減少網絡的層數來減少過擬合?小數據集基本上需要通過小的模型來防止overfit,當然如果數據集是圖像等等,也可以通過finetuning。另外一個可能是直接手標更多數據,有時候糙快猛但是還挺好使的。caffe對不同尺度的同一對象的分類和識別有哪些特殊的處理方法?這個倒也不單是caffe的問題,在圖像識別上如果需要處理不同尺度,一般就是做multi-scale的detection,可以參考一下selective search,R-CNN等等的工作。

如果不使用matlab或python接口,直接在C++的caffe代碼里對圖像進行分類有什么好的方式嗎,速度會不會比matlab和python更快?我覺得速度應該差不多,因為matlab和python的overhead不會太大。(可以不使用python,直接使用c++, chrispher經過測試,速度差距還是很大的(至少一倍以上),python在預處理圖像方面比較慢)。

CNN可以應用到對圖像進行深度圖提取嗎?效果會怎樣呢?最近nyu應該有一篇stereo的文章,應該比較類似。caffe的訓練過程能否保持對象的旋轉不變性 怎樣做到這點?目前不是很好explicit地輸入這樣的constraint,主要還是靠data augmentation(輸入各種旋轉以后的圖)來實現。怎么處理變長的圖片,因為Conv對變長不明感,而且可以用Dynamic Pooling?變長的圖片可以用SPPNet這樣的思路,最后做一個固定輸出大小的pooling。

用自己的數據(并不屬于imagenet的1000個類)在imagenet訓練的網絡上做finetune時,發現怎么調整參數最后幾乎都無法用來分類,這是什么原因呢?這個可能需要看一下圖片是否類似,比如說imagenet的模型用來做醫學圖像識別效果就很可能會不是很好,還是需要看這兩個task的數據之間是否有相似性。用自己的數據集,且類型和和imagenet的類型不太一樣(比如細胞類型),想用caff訓練的話,最少得需要多少數據量,才比較好?這個說不太好,所以最好還是先用一部分數據測試一下,然后你可以用從少到多的數據來訓練,然后外推一下可能會需要多少數據。DL中,能否預知到底學到了一個怎樣的物理模型,來實現分類的?參見上面的回答:)目前比較困難,在圖片上,大家做過一些有意思的實驗來檢測模型到底學了什么,可以參考karen simonyan的文章(用CNN來生成一個”最像”某一個類別的圖像)

dl 在ctr預測上有什么好的論文或者資料么?我不是很清楚,不過余凱師兄以前講過百度用DL做CTR效果很好,所以還是很promising的。 請問除了從分類結果看特征表出的優劣,有沒有一種通行的方式去看特征表出的優劣?還有一個問題:lstm簡直就是一個編碼模型…以后機器學習的結構都要往電子工程上靠了嗎?我覺得結構越來越復雜正背離dl的初衷了?其實大家經常批評DL的問題就是說,我們從設計feature變成了設計model(我記得原話是jitendra malik講的,我太八卦了)。所以這個的確也是一個難解的問題,興許我們可以做一個算法來自動生成很多model然后evolve這些model?MIT曾經有一篇paper來自動學習網絡的結構,但是目前state of the art的模型還經常靠手調。

2.3、模型訓練與調參

參數設置其實有點tricky,我覺得更多的還是通過已有的架構然后來做一些微調,個人也沒有太好的insights可以分享,更多的是一些經驗型的東西,推薦大家讀一下kaiming he最近的paper,很有效果,此外微軟的paper,vgg,googlenet可能有幫助。。受限于gpu內存,batchsize不能選太大,這會導致結果的不收斂,話句話說那訓練過程中batch的大小對結果影響大嗎?理論上batch小是不會影響收斂的。小batch主要的問題是在FC層的計算可能會不是很efficient,但是數學上沒有問題。

對于2-GPU(AlexNet里的group參數),其實AlexNet可以直接用單GPU來實現,大家覺得AlexNet是2GPU的緣故是,Alex當年train網絡的時候GPU內存太小,他只好用兩個GPU來實現:)后來大家一般都是用一個GPU的。

finetuning過程是用已有的模型來初始化現有的模型,在caffe里面可以設置一些layer的learning rate為零來實現不更新某些層的參數。此外,在finetuning的時候,新問題的圖像大小不同于pretraining的圖像大小時,只能縮放到同樣的大小嗎?對的。

請問在s層,如何確定該用mean pooling還是max pooling?基本上靠試。在調參方面有什么比較細致的資料或文獻集,比如solver里的 lr_policy 選擇有什么規律么? 這兩個問題,基本上我覺得還是靠經驗。marc’aurelio ranzato曾經有一個presentation講一些有用的trick,marc’aurelio的網站在這,應該是其中的某一個slides。

在自己的數據集上訓練,訓練的loss函數一直不降低,調小過偏置大小,學習率也改過很多,但是每次都很快的迭代到一個大的值,不再變化,而且測試準確率就等于瞎猜的準確率。這個可能是learning rate太大或者初始值的問題?可以縮小初始值的scale試試。

記得有一篇說論文:trainning_convolutional_networks_with_noisy_labels說在imagenet上,把30%的標簽打亂,反而使得最后的結果更好和更魯棒。那么是不是意味著我們不需要強定義的數據(不需要那么仔細的標注數據) 就可以訓練得到一個不錯的模型呢?我覺得基本上就是數據越干凈,數據越多,效果一般就越好(實際應用上我們有時候會讓human rater去再次確認一些不確定的標注)。魯棒性的問題,我覺得可能是因為增加了regularization?imagenet上基本上還是標準的protocol來training效果最好。。。

2.4、caffe與DL的學習與方向

我覺得主要還是follow tutorial,另外網上(比如知乎)也有很多解析。 現在是在做機器學習,還沒有深入deep learning,是不是要先打好機器學習的基礎再學DL會好一點?這個我其實也不是很清楚,很多想法其實都是相通的(比如說優化的問題),所以可以都看一些,然后按照自己的需求深入:)

如何將已知的世界知識,比如說語法規則等有效融入到深度學習中?這個是個好問題,目前大家都有點傾向于learning from scratch,所以我也說不好怎么做融合,但是應該是一個值得考慮的研究方向。

可否評論一下nature 新出的DL文章?reinforcement learning之類的會是下一個主要結合的點嗎?哈,Hinton本人的說法是“you won’t learn much from that paper”。那個更多的是一個overview,如果希望了解一下DL的來龍去脈的話值得讀一下。RL其實還是挺熱門的,deepmind做的就有點像RL,berkeley Pieter Abbeel組也做了很多RL的工作。

像cxxnet,這些新的框架,也集成了bn,prelu等新的模塊,caffe是否會內置這些模塊呢?我覺得會的,這個在code層面上其實沒有太大的問題。我最近主要在做一些refactor,然后還有一些公司的事情,所以沒有關注在push新的模塊上:)

目前dl在時序序列分析中的進展如何?研究思路如何,能簡單描述一下么。這個有點長,可以看看google最近的一系列machine translation和image description的工作。關于時序的問題統一回答一下,大家可以參考最近的machine translation,im2txt等等的一系列文章。DL在時序方面的應用主要是RNN/LSTM這方面,主要是用來理解sequence的信息,兩個用法:(1)提取sequence的feature,然后來做classification或者embedding,(2)從sequence到sequence,比如說輸入語音,輸出識別的句子。

2.5、其他

google brain和human brain project,恕我不好評論。公司政策:)。對于cxxnet,您是怎么看待的呢?我還挺喜歡cxxnet的一些設計的,基本上就是大家選自己喜歡的codebase來用吧:)

3、附錄

賈揚清的知乎以及他的個人主頁,微信可以關注機器學習研究會,當然也可以加一下我個人的群數據,為夢想而生(更推薦比較高大上的機器學習狂熱分子群)

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

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

相關文章

iOS多線程理解

在iOS開發中,線程的創建與管理已經被Apple進行了很好的封裝,但是在開發者實際開發中會濫用GCD,導致整個代碼混亂不堪,因此在這里需要對iOS開發中的多線程開發進行整理。 1. 主線程完成耗時操作,會導致UI卡頓,因此耗時…

Java生鮮電商平臺-SpringCloud微服務架構中分布式事務解決方案

Java生鮮電商平臺-SpringCloud微服務架構中分布式事務解決方案 說明:Java生鮮電商平臺中由于采用了微服務架構進行業務的處理,買家,賣家,配送,銷售,供應商等進行服務化,但是不可避免存在分布式事…

批量提取 caffe 特征 (python, C++, Matlab)(待續)

本文參考如下: Instant Recognition with Caffe Extracting Features Caffe Python特征提取 caffe 練習4 —-利用python批量抽取caffe計算得到的特征——by 香蕉麥樂迪 caffe 練習3 用caffe提供的C函數批量抽取圖像特征——by 香蕉麥樂迪 caffe python批量抽…

iOS單例初步理解

iOS單例初步理解 在iOS開發中,系統自帶的框架中使用了很多單例,非常方便用戶(開發者,使用比如[NSApplication sharedApplication] 等),在實際的開發中,有時候也需要設計單例對象,為…

python面向對象之類的成員

面向對象之類的成員 細分類的組成成員 類大致分為兩塊區域: 第一部分:靜態字段 第二部分:動態方法 class Animal:type_name "動物類" # 靜態變量(靜態字段)__feature "活的" # 私有靜態變量…

python元類、反射及雙線方法

元類、反射及雙線方法 元類 print(type(abc)) print(type(True)) print(type(100)) print(type([1, 2, 3])) print(type({name: 太白金星})) print(type((1,2,3))) print(type(object))class A:passprint(isinstance(object,type)) print(isinstance(A, type)) type元類是獲取該…

iOS中的多線程一般使用場景

在IOS開發中為提高程序的運行效率會將比較耗時的操作放在子線程中執行,iOS系統進程默認啟動一個主線程,用來響應用戶的手勢操作以及UI刷新,因此主線程又叫做UI線程。 前面的Blog說明了NSThread以及GCD處理并發線程以及線程安全(線…

iOS中如何優化Cell中圖片的下載性能

在iOS開發中使用最為常見的是UITableView,其中UITabelViewCell中下載圖片,會影響用戶下拉刷新UI,導致卡頓,用戶體驗不好,在這篇blog中,我將以一個例子來說明如何優化UITableView下載圖片 1.使用懶加載方式&#xff0c…

【Yoshua Bengio 親自解答】機器學習 81 個問題及答案(最全收錄)

本文轉自:http://mp.weixin.qq.com/s?__bizMzI3MTA0MTk1MA&mid401958262&idx1&sn707f228cf5779a31f0933af903516ba6&scene1&srcid0121zzdeFPtgoRoEviZ3LZDG#rd 譯者:張巨巖 王婉婷 李宏菲 戴秋池 這是 Quora 的最新節目&#xf…

Java生鮮電商平臺-SpringCloud微服務架構中網絡請求性能優化與源碼解析

Java生鮮電商平臺-SpringCloud微服務架構中網絡請求性能優化與源碼解析 說明:Java生鮮電商平臺中,由于服務進行了拆分,很多的業務服務導致了請求的網絡延遲與性能消耗,對應的這些問題,我們應該如何進行網絡請求的優化與…

XCode7 創建framework

1.新建一個靜態庫工程. file→ new→ project, 彈出框中選擇iOS→ framework & library中的cocoa touch static library.點擊Next,輸入product name: TestFramework, 點擊Next→ 點擊Create. 2.刪除向導所生成工程中的Target. 點擊工程名→ 點擊TARGETS → 右鍵Delete. …

基礎js逆向練習-登錄密碼破解(js逆向)

練習平臺:逆向賬號密碼 https://login1.scrape.center/ 直接打開平臺,輸入密碼賬號,抓包找到加密的參數攜帶的位置,這邊我們找到的是一個叫token的加密參數,這個參數的攜帶是一個密文 我們首先考慮一下搜索這個加密的…

python之socket

socket套接字 什么叫socket socket是處于應用層與傳輸層之間的抽象層,他是一組操作起來非常簡單的接口(接受數據)此接口接受數據之后,交由操作系統.socket在python中就是一個模塊. socket兩個分類 基于文件類型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件…

iOS----JSON解析

在iOS開發中與服務器進行數據交互操作,操作過程中使用最為常見的格式為JSON與XML,其中JSON較為清量,因此本篇blog就講解一下如何在iOS中進行JSON解析。 1.建立HTTP請求 (1)創建URL NSString *URLStr [NSString stringWithFormat:”http:/…

VS中每次改代碼后運行程序不更新,只有重新編譯才生效。

解決方法:將項目移除解決方案,再重新添加進來,即添加->現有項目->選擇.vcxproj文件,即可解決。 轉載于:https://www.cnblogs.com/Gregg/p/11358711.html

socket補充:通信循環、鏈接循環、遠程操作及黏包現象

socket補充:通信循環、鏈接循環、遠程操作及黏包現象 socket通信循環 server端: import socketphone socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.bind((127.0.0.1,8080))phone.listen(5)conn, client_addr phone.accept() print(conn, cl…

PCA的原理及MATLAB實現

相關文章 PCA的原理及MATLAB實現 UFLDL教程:Exercise:PCA in 2D & PCA and Whitening python-A comparison of various Robust PCA implementations --------&a…

Java生鮮電商平臺-SpringCloud微服務架構中核心要點和實現原理

Java生鮮電商平臺-SpringCloud微服務架構中核心要點和實現原理 說明:Java生鮮電商平臺中,我們將進一步理解微服務架構的核心要點和實現原理,為讀者的實踐提供微服務的設計模式,以期讓微服務在讀者正在工作的項目中起到積極的作用。…

iOS中下載小文件

在iOS中通過網絡下載小文件比如小型圖片等資源,一般在子線程中將數據完全下載完畢,然后在調用block將下載的數據整個部分返回,或者采用同步返回下載數據。 一般采用以下兩種方式: (1)使用GCD將下載操作放…