室外跑en100022分11秒什么水平

  一樓怒甩涯叔!  生氣!
楼主发言:14次 发图: | 更多
  本來不想說這些,談這些肯定會得罪很多人,說我媚陸。  人因出生環境、家庭、事業或者社會地位產生一定的優越感,這很正常。人非聖人,有點虛榮心也是正常的。  但是從來沒有那個地方人像台灣這樣集體產生莫名其妙的優越感,看不起大陸,看不起東南亞,看不起韓國,乃至看不起世界,當然除了美日之外,台灣人眼裡只有美日。  每當大陸有什麼科技進步的時候,某些台灣人都不屑一顧、嘲笑、諷刺的說這些是山寨貨,美國和日本早有了。在他們腦子裡從來不會想一下,為什麼台灣沒有?這些人沉淪在當精神美國人,精神日本人當中,靠這些獲得可憐的優越感。  當初我還在台灣當牙科護士的時候,玩QQ時被某位同事看到,這位同事也露出不屑的表情,原來是大陸的軟體,肯定是落後的軟體,沒有line好用,先不論是QQ好用還是line好用,這位可愛同事,不知道有沒有想過line不是台灣的軟體,用別人的東西還用出優越感出來了?  特別是經常看到台灣人說大陸人不能用臉書,說大陸落後,拜託!臉書是台灣的嗎?拿別人東西來跟人家比先進?這種精神也就某些台灣人身上能找到!  未完待續
  不敢送三朵花是怕你老公起疑、、
  怒抢一楼!  
  已閱。點赞!
  苹果妹子的贴帮顶  坐等各种反串进来
  用别人的东西还用出优越感。~~楼主适可而止,井盖快破了  
  我们这有句俗语:人就是随贵随贱的东西…
  蘋果妹妹好!  
  井底的生活我们不懂
  生气对宝宝可不好,不是让你少上论坛了吗,少关心政治
  昨天在一個台灣群裡談到,孩子上哪裡戶口的問題。  我就說:「上大陸戶口好了。」  接下來,我就被全群嘲諷了,全群的人開始數落大陸這裡不好、那裡不好,還有些甚至直接諷刺,你竟然讓你的孩子上『強國』的戶口,你有病嗎?  台灣護照160多個國家免簽哦,你竟然讓你孩子上強國戶口?  你不怕你孩子恨死你嗎?  我就說了一句,我不想我孩子變成太陽花,然後默默的上了有一張圖。    未來在哪裡傻瓜都知道,你們卻不知道。  這些台灣人很多都在大陸生活十年以上,很多人一窮二白的從台灣來到大陸,在大陸結婚生子,也有些人事業很成功,賺到很多錢。  可以這麼說,他們今天的一切都是大陸給的,但是他們還沒有去除自己身上所謂的優越感,一個人不懂的感恩,就算成就再大,也不過是一個人渣。
  蘋果妹紙,你這樣講我們還很不習慣呢,因為我們一向都是被批評的對象,這樣突然來一發,真的不習慣
  赞一个,纯顶
  歌词:你是我的小呀小苹果,怎么爱你都不算多..............
  坐等各种反串进来恶心人。  
  批評台灣時別忘了批評陸陸  客觀公正最重要
  支持一下  
  西瓜告非大边
  小苹果,我代替绿巨人号说对不起,你由蓝到大红的转表,是一定有心路旅程的。谢谢你对民族的认同,对兔子的认同,对民族复兴的认同。
  对了,好象你有宝宝了,恭喜,祝母子健康。  衷心的祝福。
  妹子这就是你不对了阿,我盖好的井盖你凭什么要打开?可不可以让井蛙多睡一会儿,你不爱台湾!
  台湾人的自私是自私到骨子里的,  那些在大陆混的好的人,  是害怕更多台湾人来大陆,  让他们面临竞争,  害怕饭碗被更强的台湾人抢走,  可是他们知道吗?  大陆很大很大,  机会很多很多,  大陆跨省工作的人很多,  大体会有同乡会什么的,  先到的人帮助后来者,  大家一起赚钱,  台湾人是不会那样做的,  岛民的自私好像写在基因里
  苹果m子的帖子我一向是顶了再看  
  帮顶  
  楼主很有主见,其他的我就不多说了,捧高踩低其实是社会常态。把握度就好,看个人和社会对自己的要求。  关于户口个人认为这要看你主要在哪生活和经济条件,个人认为香港双非婴儿很有参考价值,如果经济条件不是十分优渥最好还是把孩子的户口安在你们生活的地方。
  还有希望你未来的小孩能是中华人民共和国的公民。因为中华民族会越来越强大。我兔的理想是星辰大海
  @蘋果燒
16:53:00  昨天在一個台灣群裡談到,孩子上哪裡戶口的問題。  我就說:「上大陸戶口好了。」  接下來,我就被全群嘲諷了,全群的人開始數落大陸這裡不好、那裡不好,還有些甚至直接諷刺,你竟然讓你的孩子上『強國』的戶口,你有病嗎?  台灣護照160多個國家免簽哦,你竟然讓你孩子上強國戶口?  你不怕你孩子恨死你嗎?  我就說了一句,我不想我孩子變成太陽花,然後默默的上了有一張圖。  /p/l/.png......  -----------------------------  说的好,如果从来没有来过大陆的台湾人在自我陶醉还说的过去,在大陆呆了多年的还这么说,说句不好听的叫无耻
  这不是优越感啦,是自我麻痹自我陶醉,甚至有时自我欺骗的小确幸,有一部分台湾人比较唯心点,像你嘛比较客观唯物点。没办法啦,其实很多地方难免有这样一种群体心理在作怪啦,比如说上海人看不起宁波人曾经,内地人看不惯外地人等等。豁达开朗之人四海一家,基本不分你我,也没有什么高低贵贱之分,有的人是比较挑剔的,眼里只看到别人的坏处,不去辩证承认人家的好处,自己不去反省自己缺点,反而无端卖弄,要么是一种意识形态策略需要,要么本身个人的修养品行不够等等,物以类聚人以群分。
  装睡的人是叫不醒的,台湾现在就是一个装睡的社会。  
  现在美国佬是打算把台湾挂价拍卖了!哎╮(╯▽╰)╭
  感觉这是种病态。。。。。。  
  我也不太习惯
  不要太认真。至于在哪里生活,随心就好。
  我懂你,只能说太多的弯弯在井里,只能哀其不幸,走出来的,以后伤害至少少点
  说对一半  台湾人其实是很自卑的  自卑到自大而已
  来晚了,还有地方插吗
  平常心,优越感的人哪里都有。只不过思想越狭隘的地方越多而已
  美女,别这样,昨天我在你帖里看到,我的战友绿巨人发你以前的论调图片,还以为你在忽悠我兔,但是今天看了你的帖子。我知道我错了,也和你说对不起。只要是真心为了这个多灾多难的华夏民族富强伟大,给你鞠躬了。
  你不用生气,未来在哪里,自己清楚就好,台湾被一群自私的利益集团把控,而生活在里面的人却还不自知,以为被选举人想得到领导人宝座,关键在他们台湾人民手里,其实他们只是被利用的棋子,选票就是利用的第一步,而后拆桥,趁着领导地位,狂吸血,能吸多少是多少,上一个,吸一下,而民众自能在自己短暂的人生中,被浪费,前途断送,而台湾的所谓民主,不过手上的那张没有真正实际的意义,没有把利益拿到手的废纸,政府为民众的争取利益,保护利益,让百姓内心感受到才是真正的民主,祝你的生意越来越好.
  苹果骚妹子,,,是个好妹子,,,
  我是天涯新人,终于看到一个跟我深红台湾朋友一样的台湾妹子,感觉很欣慰,只要台湾还有这样的人就有希望。祝你母子平安,来大陆旅游说一声,咱们就当是远房亲戚来了,极尽地主之谊
  抢楼层。
  怒赞,如果台湾都是你这种明事理的人我觉得就好了,我们其实不是针对台湾,而是针对台独。  
  經過昨天那件事情之後,我現在已經非常堅決的決定,我的孩子全部拿大陸戶口,作為一個準媽媽,肯定是一切為了孩子。  我現在就用我孩子的未來來押注中國的未來。  我也知道這個賭注我肯定贏定了,未來的世界一定是中國的。
  顶一下
  电脑修好了就来发帖了
  苹果呀,你可知道我爱你,好吧,孩子不是我的
  因为台湾可以用爱发电,大陆不能,优越感满满  
  发布了图片    
  这宝肯定是押对了
  新疆人民我,表示热烈欢迎!
  为苹果妹子感动,我们中华民族必将屹立于世界之巅!  
  这倒是说到电点子上了,台湾人经常美日德的东西来算大陆人,就是在这台版也经常看到,真的很另类。如果被大陆人呛会去酸移动支付很落后破旧,城市低矮破,台湾人就会说,德国也不用移动支付,难道德国落后?欧洲也没有高楼大夏,难道欧洲也落后?
  苹果,台湾斗鱼主播莱恩这几天在大陆旅行,并且全程直播。晓得莱恩的愿望是什么吗?莱恩一直说:他和他的父母希望他能找个大陆妹子,回大陆定居。
  看到批评、辱骂囼湾猪的帖子,我都是爽而已。
  @蘋果燒 &&台灣某些人所謂的優越感&&  樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。  也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。  這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。  事實是你們在幹的事叫「驕其妻妾」。  古時候有個人每天跑到墳地去向人乞討剩菜剩飯。  每天吃飽喝足之後,在其妻妾面前裝有錢人。  這種事天天在台版發生。  小如支付寶、叫車app,大如航母、火箭。  無一不是山寨別人或花冤枉錢去買,假裝是自己發明的,然後吹給台灣人聽。  人口佔四分之一的國家,一個app都發明不出來,還吹?  台灣人對吹牛當然是無動無衷啦,你們就更是憤怒。  你們不把自已的體問找出來,卻歸咎於台灣人有優越感。  其實蠻幼稚的。
  昨天一个涯友发的普及支付宝的帖子,一只蛙上蹿下跳地说,这个美国日本早就有了。就是楼主说的这种调调  
  妹子,赞一个。注意身体。
  中国现在不完美,但未来会因为我们而完美  
  台版需要更多楼主,热爱但不固执,无论大陆还是台湾,有好有坏,有赞有骂,好得很  
  首先恭喜苹果好孕!然后提醒别被某些智力低下的绿绿、反串或愤青气着。  
  @評論員F
17:40:00  @蘋果燒 &&台灣某些人所謂的優越感&&   樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。   也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。   這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。   事實是你們在幹的事叫「驕其妻妾」。   古時候有個人每天跑到墳地去向人乞討剩菜剩飯。   每天吃飽喝足之後,在其妻妾面前裝有錢人。   這種事天天在台版發生。   小如支付寶、叫車app,大如航母、火箭。   無一不是山寨別人或花冤枉錢去買,假裝是自己發明的,然後吹給台灣人聽。   人口佔四分之一的國家,一個app都發明不出來,還吹?   台灣人對吹牛當然是無動無衷啦,你們就更是憤怒。   你們不把自已的體問找出來,卻歸咎於台灣人有優越感。   其實蠻幼稚的。  -----------------------------  人口佔四分之一的國家,一個app都發明不出來,還吹?   (来自天涯社区客户端)  我跟你讲哦,世界上所有的app,没有台湾的技术,它做不出来  
  中国大陆确实没有中国台湾省那么霸气的小护照,但是每当海外中国人遇险时,祖国会接你回家!
    爱你到最后不痛不痒
  苹果发帖,找个位置坐着先,加油!!  
  进步的弯弯对大陆不是好事哦
  @評論員F
17:40:00  @蘋果燒
&&台灣某些人所謂的優越感&&  樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。  也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。  這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。  事實是你們在幹的事叫「驕其妻妾」。  古時候有個人每天跑到墳地去向人乞討剩菜剩飯。  每天吃飽喝足之後,在其妻妾面前裝有錢人。  這種事天天在台版發生。  小如支付寶、叫車app,大如航母、火箭。  無一不是山寨別人或花冤枉錢去買,假裝是自己發明的,然後吹給台灣人聽。  人口佔四分之一的國家,一個app都發明不出來,還吹?  台灣人對吹牛當然是無動無衷啦,你們就更是憤怒。  你們不把自已的體問找出來,卻歸咎於台灣人有優越感。  其實蠻幼稚的。  -----------------------------  @ty_小宇宙204
17:52:00  人口佔四分之一的國家,一個app都發明不出來,還吹?  (来自天涯社区客户端)  我跟你讲哦,世界上所有的app,没有台湾的技术,它做不出来  -----------------------------  牛逼的台八子 搞个代码还要呆湾的傻逼技术 也没见原始basic语言c语言是台湾发明的呀
还尼玛有脸讲技术 你爸就应该把你射墙上——这就叫好技术!
  @評論員F
17:40:00  @蘋果燒
&&台灣某些人所謂的優越感&&  樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。  也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。  這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。  事實是你們在幹的事叫「驕其妻妾」。  古時候有個人每天跑到墳地去向人乞討剩菜剩飯。  每天吃飽喝足之後,在其妻妾面前裝有錢人。  這種事天天在台版發生......  -----------------------------  牛逼的台八子 搞个代码还要呆湾的傻逼技术 也没见原始basic语言c语言是台湾发明的呀 还尼玛有脸讲技术 你爸就应该把你射墙上——这就叫好技术!
  强势围观!!!!!  
  @評論員F
17:40:00  @蘋果燒
&&台灣某些人所謂的優越感&&  樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。  也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。  這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。  事實是你們在幹的事叫「驕其妻妾」。  古時候有個人每天跑到墳地去向人乞討剩菜剩飯。  每天吃飽喝足之後,在其妻妾面前裝有錢人。  這種事天天在台版發生......  -----------------------------  
  苹果烧妹子看问题总是很犀利。赞一个!
  @蘋果燒
16:45:00  本來不想說這些,談這些肯定會得罪很多人,說我媚陸。   人因出生環境、家庭、事業或者社會地位產生一定的優越感,這很正常。人非聖人,有點虛榮心也是正常的。   但是從來沒有那個地方人像台灣這樣集體產生莫名其妙的優越感,看不起大陸,看不起東南亞,看不起韓國,乃至看不起世界,當然除了美日之外,台灣人眼裡只有美日。   每當大陸有什麼科技進步的時候,某些台灣人都不屑一顧、嘲笑、諷刺的說這些是山寨貨,美國和...  —————————————————  你这点说的没错,点个赞,每次都是拿别人的东西来跟大陆比  
  给苹果妹子顶一个,别怕小人盯上你,有人针对完阿靓,恐怕下一个目标就是针对你,他们的目的就是让亲近大陆的台湾人在台版不敢发言,所以利用台版规则处处为难找茬
  @蘋果燒
16:53:00  昨天在一個台灣群裡談到,孩子上哪裡戶口的問題。  我就說:「上大陸戶口好了。」  接下來,我就被全群嘲諷了,全群的人開始數落大陸這裡不好、那裡不好,還有些甚至直接諷刺,你竟然讓你的孩子上『強國』的戶口,你有病嗎?  台灣護照160多個國家免簽哦,你竟然讓你孩子上強國戶口?  你不怕你孩子恨死你嗎?  我就說了一句,我不想我孩子變成太陽花,然後默默的上了有一張圖。  /p/l/.png......  -----------------------------  虽然谈好处是客观理性思维。但是在大是大非上,是不能以是否有好处作为基准的。
  @蘋果燒
16:53:00  昨天在一個台灣群裡談到,孩子上哪裡戶口的問題。  我就說:「上大陸戶口好了。」  接下來,我就被全群嘲諷了,全群的人開始數落大陸這裡不好、那裡不好,還有些甚至直接諷刺,你竟然讓你的孩子上『強國』的戶口,你有病嗎?  台灣護照160多個國家免簽哦,你竟然讓你孩子上強國戶口?  你不怕你孩子恨死你嗎?  我就說了一句,我不想我孩子變成太陽花,然後默默的上了有一張圖。  ...  —————————————————  他们可不这么想,毕竟台独有谱毒  
  @陽臺吹風
16:56:00  批評台灣時別忘了批評陸陸   客觀公正最重要  —————————————————  客观公正就是大陆至少比台湾好??  
  @陽臺吹風
16:56:00  批評台灣時別忘了批評陸陸   客觀公正最重要  —————————————————  客观公正就是大陆至少比台湾好??  
  @評論員F
17:40:00  @蘋果燒 &&台灣某些人所謂的優越感&&   樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。   也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。   這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。   事實是你們在幹的事叫「驕其妻妾」。   古時候有個人每天跑到墳地去向人乞討剩菜剩飯。   每天吃飽喝足之後,在其妻妾面前裝有錢人。   這種事天天在台版發...  —————————————————  上次有个台湾人没事跑出来比城建,这事传到台湾,台湾网友确说大陆人爱比城建,欺负台湾人,请问你怎么看?  
  懷孕最好別逛天涯,忠告
  整个台湾社会病了,,,精神病了,经济也早就病了。就像一个吸毒者一样靠幻想生活在小确信中。
  @蘋果燒
16:45:00  本來不想說這些,談這些肯定會得罪很多人,說我媚陸。   人因出生環境、家庭、事業或者社會地位產生一定的優越感,這很正常。人非聖人,有點虛榮心也是正常的。   但是從來沒有那個地方人像台灣這樣集體產生莫名其妙的優越感,看不起大陸,看不起東南亞,看不起韓國,乃至看不起世界,當然除了美日之外,台灣人眼裡只有美日。   每當大陸有什麼科技進步的時候,某些台灣人都不屑一顧、嘲笑、諷刺的說這些是山寨貨,美國和...  —————————————————  跟阿三有点像,习惯把别人的当成自己的,却不知道自己多么弱鸡  
  評論員F   17:40  67楼  @蘋果燒 &&台灣某些人所謂的優越感&&  樓主之所以有這種誤解,這在心理學上叫「確認的謬誤」。  也就是你已經認定台灣不能有優越感,然後開始找證據證明台灣人的優越感是錯的。  這當然是建立在你們土地人口絕對的多數,才會產生這種錯誤。  事實是你們在幹的事叫「驕其妻妾」。  古時候有個人每天跑到墳地去向人乞討剩菜剩飯。  每天吃飽喝足之後,在其妻妾面前裝有錢人。  這種事天天在台版發生。  小如支付寶、叫車app,大如航母、火箭。  無一不是山寨別人或花冤枉錢去買,假裝是自己發明的,然後吹給台灣人聽。  人口佔四分之一的國家,一個app都發明不出來,還吹?  台灣人對吹牛當然是無動無衷啦,你們就更是憤怒。  你們不把自已的體問找出來,卻歸咎於台灣人有優越感。  其實蠻幼稚的。  人家的城建 科技   不管是山寨 巨價買來 或是人家自己發明  這點確實比台灣先進  我們就該承認  不必枉意事實  其她就當她們自吹自擂就好
  我觉得你应该 拿台湾户口
在大陆生活
以后统一台湾的时候
tg一定会给认同大陆的台湾居民好处
  @蘋果燒
16:53:00  昨天在一個台灣群裡談到,孩子上哪裡戶口的問題。  我就說:「上大陸戶口好了。」  接下來,我就被全群嘲諷了,全群的人開始數落大陸這裡不好、那裡不好,還有些甚至直接諷刺,你竟然讓你的孩子上『強國』的戶口,你有病嗎?  台灣護照160多個國家免簽哦,你竟然讓你孩子上強國戶口?  你不怕你孩子恨死你嗎?  我就說了一句,我不想我孩子變成太陽花,然後默默的上了有一張圖。  /p/l/.png......  -----------------------------  其实这个问题,我们大陆人也不明白到底是为什么,他们的优越感到底来自何处?难道真的是民主对专制的优越感么?还是来自于物质财富?人种文化?在大陆生活这么多年,大陆在一年年的变化着,虽然还有很多弊端但是一切都在往好的方向发展,难道他们就看不到?不去思考么,这真是一个深奥的问题
  建议保留台湾户籍,打入台湾内部。或许他(她)将来可以成功主政台湾,直接可以开启政治谈判,为统一做出贡献。两千三百万分之一的概率,离双色球中奖也不太远,更何况岛上一百万左右沉默的红统应该是有的。
  孕妇就不要动怒注意身体才好  
使用“←”“→”快捷翻页
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
破骨细胞的发育与活性世.pdf 6页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:120 &&
破骨细胞的发育与活性世.pdf
你可能关注的文档:
··········
··········
中国组织工程研究 第 18卷 第 42期 出版
ChineseJournalofTissueEngineeringResearch October8,2014 Vo1.18,No.42
www.CRTER.org
运动影响骨转换:促进或抑制骨细胞/破骨细胞的发育和活性
张玲莉’,陈炳霖’,邹 军 (’上海体育学院,上海市 200438;上海体育学院科研处,上海市 200438)
文章亮点:
1此问题的已知信息:运动对骨转换的影响主要是对骨形成和骨吸收的影响,通过促进或抑制成骨细胞和破骨细
张玲莉,女,1989年生 ,
胞的发育,提高或抑制成骨细胞和破骨细胞的活性,对骨重建起加速或延迟的作用。
安徽省淮南市人 ,汉族,
2文章增加的新信息:文章分析了运动对血液和尿样本中骨转换标志物水平的影响。研究表明,运动作用于骨骼
上海体育学院在读硕士,
主要从事运动训练对骨代
产生的骨转换标志物变化早于骨密度出现的变化。
谢影响的研究。
3临床应用的意义:通过检测血、尿样本中骨转换标志物的水平,对于评价骨代谢状态、骨质疏松诊断分型、预
测骨折风险,观察药物治疗的疗效,以及代谢性骨病的鉴别诊断等有重要意义。
通讯作者:邹军,博士,
教授,上海体育学院科研
组织构建{骨组织I程}骨形成;骨吸收:碱性磷酸酶:骨钙素 裁骏暴 P【tcP和PIN :羟啸氨酸;毗
处,上海市 200438
啶啉秘税氧毗啶啭:I型骏踉交联N末瑞 l【
:I型皎曝C~ r(CTX):抗滔石酸酸性磷酸酶:国家 自然
doi:l0396
h【ttp:/w/ww.crter.org】
碱性磷酸酶:骨钙素
基金资助:
中图分类号:R318
文献标识码:A
教育部高等学校搏士学科点专项科研基金资助课器
133’5融10002) 国家自然科学基金项 目(81’70323):
文章编号:
“上海南人类运动能力开发s保障重点实验室上【海体育学嗡 1DZ226110 资助
正在加载中,请稍后...后使用快捷导航没有帐号?
平板/笔记本
云服务专区
跑向10002,门票是我的
&已臻大成&
来自:浏览器
psb.jpg (87.95 KB, 下载次数: 24)
22:51 上传
为了门票我也是很拼的!!!
欢迎热心的粉粉加入热心花粉团队,如果你够热心,够积极,够活跃,请点击下面的帖子进行申请加入。
热心花粉专属勋章和用户组展示:
热心花粉& &
专属勋章展示:
width:100%">
&禁止访问&
来自:浏览器
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
width:100%">
&禁止发言&
来自:浏览器
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
width:100%">
至少3个原创技术帖,每个帖≥5K浏览,有效回复数≥150,被加分数≥15
至少5个原创技术帖,每个帖≥8K浏览,有效回复≥300,加分数达≥25
至少10个原创技术帖,每个帖≥1W2浏览,有效回复≥600,加分数达≥50
关注华为花粉俱乐部微信公众平台——“华为花粉俱乐部”
在职斑竹的身份勋章,感谢斑竹的辛勤劳动
申请成为热心花粉,满足热心花粉条件即可获得!http://cn./forum.php?mod=viewthread&tid=183642
老茶馆众生随拍:黑煤球的业余生活红枫《川西高原》潜伏墨荷墨荷
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利&p&这是一个很有意思的topic,在业界也有一些研究,但大多并不深入,我记得前一段看过有一篇比较有趣的:&/p&&ul&&li&Zhang, F., Yuan, N. J., Lian, D., Xie, X., & Ma, W.-Y. (2016). Collaborative Knowledge Base Embedding for Recommender Systems. KDD, 353–362. &a href=&///?target=https%3A//doi.org/10..2939673& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&doi.org/10.&/span&&span class=&invisible&&.2939673&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&思路比较暴力,就是将网络、文本、图片embedding化,丢到网络里一起迭代,其中网络用的是TransR,文本、图片都是直接套了个Auto Encoder,简单粗暴,但是看起来应该是work的&/p&
这是一个很有意思的topic,在业界也有一些研究,但大多并不深入,我记得前一段看过有一篇比较有趣的:Zhang, F., Yuan, N. J., Lian, D., Xie, X., & Ma, W.-Y. (2016). Collaborative Knowledge Base Embedding for Recommender Systems. KDD, 353–362. …
&p&吾.......终于看完这个blog了。我觉得他说得有道理。&/p&&br&&p&其实这个文章并不是解释所有deep learning和重整群的关系,而介绍了DBN和重整群的关系。不过我觉得这种关系应该是可以推广其他的深层神经网络上去的。DBN是由一层叠一层的RBM实现的。这个博主试图解释的就是为什么通过叠起一层又一层的RBM,能实现对输入特征的降噪和学习。&/p&&br&&p&首先我给你简单说一下动力系统:&/p&&img src=&///equation?tex=X%5E%7Bn%2B1%7D%3Df%28X%5En%29& alt=&X^{n+1}=f(X^n)& eeimg=&1&&&p&其中 &img src=&///equation?tex=X%5En& alt=&X^n& eeimg=&1&& 是系统在第n步的状态,而 &img src=&///equation?tex=X%5E0& alt=&X^0& eeimg=&1&& 就是给定的系统初始状态,方程f是系统状态转化的方程。所以我们通过简单的迭代,就能有这个关系:&/p&&img src=&///equation?tex=X%5En%3Df%5En%28X%5E0%29& alt=&X^n=f^n(X^0)& eeimg=&1&&&p&上面的是离散动力系统。连续动力系统的关系可以写成:&/p&&img src=&///equation?tex=X_t%3Dh%28X%29& alt=&X_t=h(X)& eeimg=&1&&&p&当n趋于正无穷,如果方程f的性质足够好,那么我们就可以得到 &img src=&///equation?tex=X%5En& alt=&X^n& eeimg=&1&& 会收敛到某个状态上面去&/p&&img src=&///equation?tex=X%5E%5Cinfty%3D%5Clim_%7Bn%5Cto%5Cinfty%7Df%5En%28X%29& alt=&X^\infty=\lim_{n\to\infty}f^n(X)& eeimg=&1&&&p&然后,动力系统里面,critical point的概念,就是存在某个状态状态 &img src=&///equation?tex=%5Ctilde%7BX%7D& alt=&\tilde{X}& eeimg=&1&& ,给定任意初始,如果你某一步的状态到达了 &img src=&///equation?tex=%5Ctilde%7BX%7D& alt=&\tilde{X}& eeimg=&1&& ,那么你就会有&/p&&img src=&///equation?tex=%5Ctilde%7BX%7D%3Df%28%5Ctilde%7BX%7D%29& alt=&\tilde{X}=f(\tilde{X})& eeimg=&1&&&p&也就是说你的状态已经到达一个平衡态,永远不会再变化了。如果f是非线性的方程,那么这个动力系统一般是无解析解的(例如三体运动,也是一个动力系统,不可解)。只有在f是一个比较特殊的方程,或者初始状态是一些比较特殊的构型时,动力系统才会有解析解。至于怎么求解析解,就是文中说的那个RGE方程了(不过数学家解动力系统一般会用viscosity solution或者liouville-arnold定理或者backward reduction)。然后群论告诉我们,我们可以将方程f看做一个算子,然后我们就得到了一个半群:&/p&&img src=&///equation?tex=%5C%7Bf%5En%5C%7D& alt=&\{f^n\}& eeimg=&1&&&p&但是怎么将这个半裙的形式写下来,则很难办到了。但是如果方程f是一个线性算子,例如拉普拉斯算子或者是个矩阵,那么这个动力系统的解就可以写成&/p&&img src=&///equation?tex=X%3De%5E%7BLt%7DX_0& alt=&X=e^{Lt}X_0& eeimg=&1&&&p&其中L是线性矩阵或者线性算子。这个也就是文中所说的重整化群了。&/p&&br&&p&然后为什么critical point的性质非常好。例如使用迭代算法进行聚类(例如K-Mean或者EM),迭代算法本身就是一个动力系统。如果你能证明你的动力系统能收敛到某个critical point上面去,那么这个critical point包含了去噪后系统的所有特征。例如你用迭代算法进行聚类,当你迭代了足够多的次数之后,你就能达到将不同的类别分出来的状态,这个就是等价于去噪后的系统特征,也说明这个状态是critical point。&/p&&br&&p&最后就是到DBN。因为DBN是一层一层的RBM叠起来。而每一层的RBM都是用相同的法则,从上一层的RBM训练出来的,所以广义来说,所有的RBM就是一个动力系统的演化过程。但是RBM的训练法则不是一个线性方程,我们没可能解出这些RBM的演化法则。&/p&&br&&p&所以这里有一些在动力系统里比较重要的理论来了:1.动力系统在不受扰动的情况下,每一条轨迹都对应一个唯一的能量值或者叫哈密尔顿量(能量面);2.动力系统在受到扰动的情况下,还是会有能量面保留下来的(KAM理论)。然后我们再来看看是怎么训练Hidden unit的? 训练Hidden Unit的方式,就是尽可能地保持hidden layer与input layer的自由能不变(自由能也是一种哈密尔顿量)。所以,即使DBN严格来说,每一层RBM的哈密尔顿量不守恒,但也只是受到了微扰,所以DBN基本是一条对应从初始点移动到critical point的路径。当你到达critical point的时候,所有噪声都会被过滤掉,只剩下系统的特征保留了下来。这就是为什么DBN学习能力这么好的原因。&/p&&br&&p&BTW,这也是为什么有些人觉得CNN里面pooling是多余的原因。你不用自己pooling,系统也会自动过滤掉噪声和提取特征的。而且pooling还可能造成特征损失,是得不偿失的行为。但是可能系统过滤噪声的速率会非常慢,即使你知道在无限远处噪声会被完全过滤到,你是无法到达无穷远处的,所以pooling有时候还是必要的,这相当于一种trade off了。&/p&&br&&p&个人意见:这是一种很有意思的理论,但还需要证明。首先你要证明深层神经网络对每一层的训练,只是造成了微扰,让系统本来的演化路径都保留下来了。其次,你要证明深层神经网络对应的演化路径存在critical point。不是所有动力系统的演化路径都有critical point的。最好的反例就是热传导方程:&/p&&img src=&///equation?tex=X%3De%5E%7B%5Cbigtriangleup+t%7DX_0& alt=&X=e^{\bigtriangleup t}X_0& eeimg=&1&&&p&这个方程的平衡态对应的离散形式就是&/p&&img src=&///equation?tex=X%3D%5B%5Cbeta%5Cdelta_%7Bi%2Cj%7D-%5Calpha%5Cdelta_%7Bi-1%2Cj%7D-%5Calpha%5Cdelta_%7Bi%2B1%2Cj%7D%5DX& alt=&X=[\beta\delta_{i,j}-\alpha\delta_{i-1,j}-\alpha\delta_{i+1,j}]X& eeimg=&1&&&p&其中 &img src=&///equation?tex=%5B%5Cbeta%5Cdelta_%7Bi%2Cj%7D-%5Calpha%5Cdelta_%7Bi-1%2Cj%7D-%5Calpha%5Cdelta_%7Bi%2B1%2Cj%7D%5D& alt=&[\beta\delta_{i,j}-\alpha\delta_{i-1,j}-\alpha\delta_{i+1,j}]& eeimg=&1&& 这个矩阵,对应的就是RBM,或者说Ising Model的构造矩阵,惊不惊喜,意不意外!&/p&&p&当你将方程定义在 &img src=&///equation?tex=%5Cmathbb%7BR%7D%5En& alt=&\mathbb{R}^n& eeimg=&1&& 上的时候,这个方程根本就没有平衡态。&/p&&br&&p&其实这种想法不是很新鲜了,当年EM算法的证明,就是用了动力系统,或者文中所说的重整化群。然后EM算法才被数学广泛认可的。现在深层神经网络还有很多证明需要解决,很多数学家也在这方面做着研究。我觉得再过10年左右,深层神经网络的理论建立工作大致就能完成了&/p&
吾.......终于看完这个blog了。我觉得他说得有道理。 其实这个文章并不是解释所有deep learning和重整群的关系,而介绍了DBN和重整群的关系。不过我觉得这种关系应该是可以推广其他的深层神经网络上去的。DBN是由一层叠一层的RBM实现的。这个博主试图解释的…
&figure&&img src=&/50/v2-dd0c322ddf0a42c976c94_b.png& data-rawwidth=&522& data-rawheight=&369& class=&origin_image zh-lightbox-thumb& width=&522& data-original=&/50/v2-dd0c322ddf0a42c976c94_r.png&&&/figure&&p&我最近有一些nmb想跟大家分享:&/p&&p&1. 在安装某个库的时候,明明是按官方说的一步步来,可是在我电脑上就是各种报错。&/p&&p&2. 直接用pip或者anaconda安装的OpenCV没法调用本地的ffmpeg编解码器,还有一些需要从头编译的库直接利用conda安装也会出现或多或少的问题。&/p&&p&3. 别人放在github的代码我下载到本机后无法直接跑,我只想验证一下他的结果,但是却需要各种依赖库,各种改环境变量,改变我本地的各种设置,最终系统改得连我自己都不认识了,就算跑通了它的代码,要跑另一些又TM不行了。&/p&&br&&p&毕竟不是CS本专业出身,对于操作系统和软件的基础不是很牢固,所以我再折腾了一周之后,终于决定投入docker的怀抱,并且自己封装了一个image,涵盖了目前做研究需要的各种深度学习和软件库:&a href=&/?target=https%3A///r/yiminglin/dl-image/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/r/yiming&/span&&span class=&invisible&&lin/dl-image/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 希望这篇简介可以帮助大家摆脱环境的烦恼:&/p&&figure&&img src=&/50/v2-e820d3e46759acbba2502_b.png& data-rawwidth=&1278& data-rawheight=&522& class=&origin_image zh-lightbox-thumb& width=&1278& data-original=&/50/v2-e820d3e46759acbba2502_r.png&&&/figure&&br&&h2&Docker是什么?&/h2&&p&中文社区给了简洁的概括:&/p&&ul&&li&docker是一个开源的软件部署解决方案;&/li&&li&docker也是轻量级的应用容器框架;&/li&&li&docker可以打包、发布、运行任何的应用。&/li&&/ul&&p&在我看来,就是类似虚拟机的东西,只是不同点是虚拟机的硬件都是靠CPU虚拟出来的,而docker可以调用你的本地硬件进行计算,而且docker的封装更为精简。&/p&&p&Docker中最重要的两个概念就是image和container,我从官网找到了以下解释&/p&&blockquote&&h3&Docker objects&/h3&&p&When you use Docker, you are creating and using images, containers, networks, volumes, plugins, and other objects. This section is a brief overview of some of those objects.&/p&&h4&IMAGES&/h4&&p&An &em&image&/em& is a read-only template with instructions for creating a Docker container. Often, an image is &em&based on&/em& another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run.&/p&&p&You might create your own images or you might only use those created by others and published in a registry. To build your own image, you create a &em&Dockerfile&/em& with a simple syntax for defining the steps needed to create the image and run it. Each instruction in a Dockerfile creates a layer in the image. When you change the Dockerfile and rebuild the image, only those layers which have changed are rebuilt. This is part of what makes images so lightweight, small, and fast, when compared to other virtualization technologies.&/p&&h4&CONTAINERS&/h4&&p&A container is a runnable instance of an image. You can create, run, stop, move, or delete a container using the Docker API or CLI. You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state.&/p&&p&By default, a container is relatively well isolated from other containers and its host machine. You can control how isolated a container’s network, storage, or other underlying subsystems are from other containers or from the host machine.&/p&&p&A container is defined by its image as well as any configuration options you provide to it when you create or run it. When a container stops, any changes to its state that are not stored in persistent storage disappears.&/p&&/blockquote&&p&简言之,就像程序和进程的区别一样,程序是一首曲子,和进程则是曲子的一次演奏。当你run一个container后,无论如何折腾当前的container都不会影响到image,当然,如果你想保存你对container的修改,请参考docker的&a href=&/?target=https%3A///engine/reference/commandline/commit/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&commit命令&i class=&icon-external&&&/i&&/a&。&/p&&br&&br&&h2&Nvidia-Docker插件&/h2&&p&&a href=&/?target=https%3A///NVIDIA/nvidia-docker/wiki& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Nvidia-Docker&i class=&icon-external&&&/i&&/a&是英伟达官方出品的docker插件,专门用来允许container直接调用本地的英伟达GPU。不过目前只支持linux系统,需要在你的本机安装好CUDA和CUDNN&br&&/p&&br&&h2&Docker Hub&/h2&&p&和github一样,DockerHub是用来分享自己制作的image的平台,我做的image可以在这里找到&a href=&/?target=https%3A///r/yiminglin/dl-image/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/r/yiming&/span&&span class=&invisible&&lin/dl-image/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&br&&h2&使用案例&/h2&&ul&&li&&p&运行一个container,并且开启交互式的命令行。当你运行这个命令后,就像远程登录了一台服务器一样,进入bash界面。&/p&&/li&&li&&div class=&highlight&&&pre&&code class=&language-bash&&&span&&/span&nvidia-docker run -it yiminglin/dl-image:latest
&/code&&/pre&&/div&&br&&/li&&br&&li&&p&载入home路径到docker的container&br&需要注意的是一旦你退出某个container,所有你做的东西都不会保存,所以为了保存数据和代码,我们可以把某个目录载入到container中,这样我们在docker中对该目录所做的修改都会保存到本机了。&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&nvidia-docker run -v /home/yiming/:$(pwd) -it yiminglin/dl-image:latest
&/code&&/pre&&/div&上述命令把加载了我本地的home路径,在container就可以在/home/目录中看到我本地机器上保存在home目录的所有东西:&br&&figure&&img src=&/50/v2-3bbf730ccce0a2872d66_b.png& data-rawwidth=&731& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&731& data-original=&/50/v2-3bbf730ccce0a2872d66_r.png&&&/figure&&br&&/li&&li&&p&使用Jupyter notebook:&br&Jupyter notebook是做实验保存数据和分析的重要工具,也是我主要用的开发工具,如果你不需要打开命令行,而是直接想使用jupyter,可以用下面的命令:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&nvidia-docker run -v /home/yiming/:$(pwd) -it -p
yiminglin/dl-image:latest sh -c &jupyter notebook --allow-root --no-browser --ip 0.0.0.0 /home/yiming&
&/code&&/pre&&/div&该命令把本地home路径载入container,并且把本地端口8888映射到docker container的8888端口(Jupyter的默认端口),最后中home目录中打开notebook,可以看到提示如下:&figure&&img src=&/50/v2-b0dc4d1332f8bcd6bbd123_b.png& data-rawwidth=&732& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&732& data-original=&/50/v2-b0dc4d1332f8bcd6bbd123_r.png&&&/figure&&br&在浏览器输入它提示的网站,就可以使用notebook了&figure&&img src=&/50/v2-ad0eb48121e_b.png& data-rawwidth=&1855& data-rawheight=&1056& class=&origin_image zh-lightbox-thumb& width=&1855& data-original=&/50/v2-ad0eb48121e_r.png&&&/figure&&br&&/li&&li&验证container是否调用了GPU&br&我用一个notebook代码来验证是否真的调用了GPU,首先利用&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&nvidia-smi
&/code&&/pre&&/div&本地查看我的GPU状态,&figure&&img src=&/50/v2-6f1b1edb1ce2ecde9f34_b.png& data-rawwidth=&726& data-rawheight=&366& class=&origin_image zh-lightbox-thumb& width=&726& data-original=&/50/v2-6f1b1edb1ce2ecde9f34_r.png&&&/figure&&br&只有一些系统进程,现在我们在上一步的notebook中新建一个python2的notebook,然后运行一些简单的tensorflow代码&figure&&img src=&/50/v2-3deb40b6a60dced5dfcbd03bc859224e_b.png& data-rawwidth=&1183& data-rawheight=&292& class=&origin_image zh-lightbox-thumb& width=&1183& data-original=&/50/v2-3deb40b6a60dced5dfcbd03bc859224e_r.png&&&/figure&简单的tensorflow测试代码&br&&figure&&img src=&/50/v2-bde2a421a2f0_b.png& data-rawwidth=&394& data-rawheight=&159& class=&content_image& width=&394&&&/figure&可以看到container命令行中的输出为:&figure&&img src=&/50/v2-614f82b62db_b.png& data-rawwidth=&729& data-rawheight=&431& class=&origin_image zh-lightbox-thumb& width=&729& data-original=&/50/v2-614f82b62db_r.png&&&/figure&&br&本机的GPU状态为&figure&&img src=&/50/v2-2cd2e83faca_b.png& data-rawwidth=&730& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&730& data-original=&/50/v2-2cd2e83faca_r.png&&&/figure&&br&由此可以看出nvidia-docker确实实现了container到GPU之间的数据传输。&/li&&/ul&
我最近有一些nmb想跟大家分享:1. 在安装某个库的时候,明明是按官方说的一步步来,可是在我电脑上就是各种报错。2. 直接用pip或者anaconda安装的OpenCV没法调用本地的ffmpeg编解码器,还有一些需要从头编译的库直接利用conda安装也会出现或多或少的问题。3…
&p&本文会通过 Keras 搭建一个深度卷积神经网络来识别一张图片是猫还是狗,在验证集上的准确率可以达到99.6%,建议使用显卡来运行该项目。本项目使用的 Keras 版本是1.2.2。&br&&/p&&p&提示:文末附上所有代码的下载地址。&/p&&h1&猫狗大战&/h1&&p&数据集来自 kaggle 上的一个竞赛:&a href=&/?target=https%3A///c/dogs-vs-cats-redux-kernels-edition& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dogs vs. Cats&i class=&icon-external&&&/i&&/a&,训练集有25000张,猫狗各占一半。测试集12500张,没有标定是猫还是狗。&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&?
猫狗大战 ls train | head
cat.10.jpg
cat.100.jpg
cat.1000.jpg
cat.10000.jpg
cat.10001.jpg
cat.10002.jpg
cat.10003.jpg
cat.10004.jpg
猫狗大战 ls test | head
&/code&&/pre&&/div&&p&下面是训练集的一部分例子:&br&&/p&&figure&&img src=&/50/v2-b5f4f4e0febbb805a40aef500b14d171_b.png& data-rawwidth=&695& data-rawheight=&482& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&/50/v2-b5f4f4e0febbb805a40aef500b14d171_r.png&&&/figure&&br&&h1&数据预处理&/h1&&p&由于我们的数据集的文件名是以type.num.jpg这样的方式命名的,比如cat.0.jpg,但是使用 Keras 的 ImageDataGenerator 需要将不同种类的图片分在不同的文件夹中,因此我们需要对数据集进行预处理。这里我们采取的思路是创建符号链接(symbol link),这样的好处是不用复制一遍图片,占用不必要的空间。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&os&/span&
&span class=&kn&&import&/span& &span class=&nn&&shutil&/span&
&span class=&n&&train_filenames&/span& &span class=&o&&=&/span& &span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&listdir&/span&&span class=&p&&(&/span&&span class=&s1&&'train'&/span&&span class=&p&&)&/span&
&span class=&n&&train_cat&/span& &span class=&o&&=&/span& &span class=&nb&&filter&/span&&span class=&p&&(&/span&&span class=&k&&lambda&/span& &span class=&n&&x&/span&&span class=&p&&:&/span&&span class=&n&&x&/span&&span class=&p&&[:&/span&&span class=&mi&&3&/span&&span class=&p&&]&/span& &span class=&o&&==&/span& &span class=&s1&&'cat'&/span&&span class=&p&&,&/span& &span class=&n&&train_filenames&/span&&span class=&p&&)&/span&
&span class=&n&&train_dog&/span& &span class=&o&&=&/span& &span class=&nb&&filter&/span&&span class=&p&&(&/span&&span class=&k&&lambda&/span& &span class=&n&&x&/span&&span class=&p&&:&/span&&span class=&n&&x&/span&&span class=&p&&[:&/span&&span class=&mi&&3&/span&&span class=&p&&]&/span& &span class=&o&&==&/span& &span class=&s1&&'dog'&/span&&span class=&p&&,&/span& &span class=&n&&train_filenames&/span&&span class=&p&&)&/span&
&span class=&k&&def&/span& &span class=&nf&&rmrf_mkdir&/span&&span class=&p&&(&/span&&span class=&n&&dirname&/span&&span class=&p&&):&/span&
&span class=&k&&if&/span& &span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&n&&exists&/span&&span class=&p&&(&/span&&span class=&n&&dirname&/span&&span class=&p&&):&/span&
&span class=&n&&shutil&/span&&span class=&o&&.&/span&&span class=&n&&rmtree&/span&&span class=&p&&(&/span&&span class=&n&&dirname&/span&&span class=&p&&)&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&mkdir&/span&&span class=&p&&(&/span&&span class=&n&&dirname&/span&&span class=&p&&)&/span&
&span class=&n&&rmrf_mkdir&/span&&span class=&p&&(&/span&&span class=&s1&&'train2'&/span&&span class=&p&&)&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&mkdir&/span&&span class=&p&&(&/span&&span class=&s1&&'train2/cat'&/span&&span class=&p&&)&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&mkdir&/span&&span class=&p&&(&/span&&span class=&s1&&'train2/dog'&/span&&span class=&p&&)&/span&
&span class=&n&&rmrf_mkdir&/span&&span class=&p&&(&/span&&span class=&s1&&'test2'&/span&&span class=&p&&)&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&symlink&/span&&span class=&p&&(&/span&&span class=&s1&&'../test/'&/span&&span class=&p&&,&/span& &span class=&s1&&'test2/test'&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&filename&/span& &span class=&ow&&in&/span& &span class=&n&&train_cat&/span&&span class=&p&&:&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&symlink&/span&&span class=&p&&(&/span&&span class=&s1&&'../../train/'&/span&&span class=&o&&+&/span&&span class=&n&&filename&/span&&span class=&p&&,&/span& &span class=&s1&&'train2/cat/'&/span&&span class=&o&&+&/span&&span class=&n&&filename&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&filename&/span& &span class=&ow&&in&/span& &span class=&n&&train_dog&/span&&span class=&p&&:&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&symlink&/span&&span class=&p&&(&/span&&span class=&s1&&'../../train/'&/span&&span class=&o&&+&/span&&span class=&n&&filename&/span&&span class=&p&&,&/span& &span class=&s1&&'train2/dog/'&/span&&span class=&o&&+&/span&&span class=&n&&filename&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&br&&p&我们可以从下面看到文件夹的结构,train2里面有两个文件夹,分别是猫和狗,每个文件夹里是12500张图。&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&├── test [12500 images]
├── test.zip
├── test2
└── test -& ../test/
├── train [25000 images]
├── train.zip
└── train2
├── cat [12500 images]
└── dog [12500 images]
&/code&&/pre&&/div&&h1&导出特征向量&/h1&&p&对于这个题目来说,使用预训练的网络是最好不过的了,经过前期的测试,我们测试了 ResNet50 等不同的网络,但是排名都不高,现在看来只有一两百名的样子,所以我们需要提高我们的模型表现。那么一种有效的方法是综合各个不同的模型,从而得到不错的效果,兼听则明。如果是直接在一个巨大的网络后面加我们的全连接,那么训练10代就需要跑十次巨大的网络,而且我们的卷积层都是不可训练的,那么这个计算就是浪费的。所以我们可以将多个不同的网络输出的特征向量先保存下来,以便后续的训练,这样做的好处是我们一旦保存了特征向量,即使是在普通笔记本上也能轻松训练。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&keras.models&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&kn&&from&/span& &span class=&nn&&keras.layers&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&kn&&from&/span& &span class=&nn&&keras.applications&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&kn&&from&/span& &span class=&nn&&keras.preprocessing.image&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&kn&&import&/span& &span class=&nn&&h5py&/span&
&span class=&k&&def&/span& &span class=&nf&&write_gap&/span&&span class=&p&&(&/span&&span class=&n&&MODEL&/span&&span class=&p&&,&/span& &span class=&n&&image_size&/span&&span class=&p&&,&/span& &span class=&n&&lambda_func&/span&&span class=&o&&=&/span&&span class=&bp&&None&/span&&span class=&p&&):&/span&
&span class=&n&&width&/span& &span class=&o&&=&/span& &span class=&n&&image_size&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&n&&height&/span& &span class=&o&&=&/span& &span class=&n&&image_size&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span&
&span class=&n&&input_tensor&/span& &span class=&o&&=&/span& &span class=&n&&Input&/span&&span class=&p&&((&/span&&span class=&n&&height&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&))&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&input_tensor&/span&
&span class=&k&&if&/span& &span class=&n&&lambda_func&/span&&span class=&p&&:&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&Lambda&/span&&span class=&p&&(&/span&&span class=&n&&lambda_func&/span&&span class=&p&&)(&/span&&span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&n&&base_model&/span& &span class=&o&&=&/span& &span class=&n&&MODEL&/span&&span class=&p&&(&/span&&span class=&n&&input_tensor&/span&&span class=&o&&=&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&weights&/span&&span class=&o&&=&/span&&span class=&s1&&'imagenet'&/span&&span class=&p&&,&/span& &span class=&n&&include_top&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&)&/span&
&span class=&n&&model&/span& &span class=&o&&=&/span& &span class=&n&&Model&/span&&span class=&p&&(&/span&&span class=&n&&base_model&/span&&span class=&o&&.&/span&&span class=&n&&input&/span&&span class=&p&&,&/span& &span class=&n&&GlobalAveragePooling2D&/span&&span class=&p&&()(&/span&&span class=&n&&base_model&/span&&span class=&o&&.&/span&&span class=&n&&output&/span&&span class=&p&&))&/span&
&span class=&n&&gen&/span& &span class=&o&&=&/span& &span class=&n&&ImageDataGenerator&/span&&span class=&p&&()&/span&
&span class=&n&&train_generator&/span& &span class=&o&&=&/span& &span class=&n&&gen&/span&&span class=&o&&.&/span&&span class=&n&&flow_from_directory&/span&&span class=&p&&(&/span&&span class=&s2&&&train2&&/span&&span class=&p&&,&/span& &span class=&n&&image_size&/span&&span class=&p&&,&/span& &span class=&n&&shuffle&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&,&/span&
&span class=&n&&batch_size&/span&&span class=&o&&=&/span&&span class=&mi&&16&/span&&span class=&p&&)&/span&
&span class=&n&&test_generator&/span& &span class=&o&&=&/span& &span class=&n&&gen&/span&&span class=&o&&.&/span&&span class=&n&&flow_from_directory&/span&&span class=&p&&(&/span&&span class=&s2&&&test2&&/span&&span class=&p&&,&/span& &span class=&n&&image_size&/span&&span class=&p&&,&/span& &span class=&n&&shuffle&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&,&/span&
&span class=&n&&batch_size&/span&&span class=&o&&=&/span&&span class=&mi&&16&/span&&span class=&p&&,&/span& &span class=&n&&class_mode&/span&&span class=&o&&=&/span&&span class=&bp&&None&/span&&span class=&p&&)&/span&
&span class=&n&&train&/span& &span class=&o&&=&/span& &span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&predict_generator&/span&&span class=&p&&(&/span&&span class=&n&&train_generator&/span&&span class=&p&&,&/span& &span class=&n&&train_generator&/span&&span class=&o&&.&/span&&span class=&n&&nb_sample&/span&&span class=&p&&)&/span&
&span class=&n&&test&/span& &span class=&o&&=&/span& &span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&predict_generator&/span&&span class=&p&&(&/span&&span class=&n&&test_generator&/span&&span class=&p&&,&/span& &span class=&n&&test_generator&/span&&span class=&o&&.&/span&&span class=&n&&nb_sample&/span&&span class=&p&&)&/span&
&span class=&k&&with&/span& &span class=&n&&h5py&/span&&span class=&o&&.&/span&&span class=&n&&File&/span&&span class=&p&&(&/span&&span class=&s2&&&gap_&/span&&span class=&si&&%s&/span&&span class=&s2&&.h5&&/span&&span class=&o&&%&/span&&span class=&n&&MODEL&/span&&span class=&o&&.&/span&&span class=&n&&func_name&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&h&/span&&span class=&p&&:&/span&
&span class=&n&&h&/span&&span class=&o&&.&/span&&span class=&n&&create_dataset&/span&&span class=&p&&(&/span&&span class=&s2&&&train&&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&train&/span&&span class=&p&&)&/span&
&span class=&n&&h&/span&&span class=&o&&.&/span&&span class=&n&&create_dataset&/span&&span class=&p&&(&/span&&span class=&s2&&&test&&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&test&/span&&span class=&p&&)&/span&
&span class=&n&&h&/span&&span class=&o&&.&/span&&span class=&n&&create_dataset&/span&&span class=&p&&(&/span&&span class=&s2&&&label&&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&train_generator&/span&&span class=&o&&.&/span&&span class=&n&&classes&/span&&span class=&p&&)&/span&
&span class=&n&&write_gap&/span&&span class=&p&&(&/span&&span class=&n&&ResNet50&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&mi&&224&/span&&span class=&p&&,&/span& &span class=&mi&&224&/span&&span class=&p&&))&/span&
&span class=&n&&write_gap&/span&&span class=&p&&(&/span&&span class=&n&&InceptionV3&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&mi&&299&/span&&span class=&p&&,&/span& &span class=&mi&&299&/span&&span class=&p&&),&/span& &span class=&n&&inception_v3&/span&&span class=&o&&.&/span&&span class=&n&&preprocess_input&/span&&span class=&p&&)&/span&
&span class=&n&&write_gap&/span&&span class=&p&&(&/span&&span class=&n&&Xception&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&mi&&299&/span&&span class=&p&&,&/span& &span class=&mi&&299&/span&&span class=&p&&),&/span& &span class=&n&&xception&/span&&span class=&o&&.&/span&&span class=&n&&preprocess_input&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&为了复用代码,我觉得写一个函数是非常有必要的,那么我们的函数就需要输入模型,输入图片的大小,以及&a href=&/?target=https%3A///fchollet/keras/blob/master/keras/applications/inception_v3.py%23L389-L393& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&预处理函数&i class=&icon-external&&&/i&&/a&,因为 Xception 和 Inception V3 都需要将数据限定在 (-1, 1) 的范围内,然后我们利用 GlobalAveragePooling2D 将卷积层输出的每个激活图直接求平均值,不然输出的文件会非常大,且容易过拟合。然后我们定义了两个 generator,利用 model.predict_generator 函数来导出特征向量,最后我们选择了 ResNet50, Xception, Inception V3 这三个模型(如果有兴趣也可以导出 VGG 的特征向量)。每个模型导出的时间都挺长的,在 aws p2.xlarge 上大概需要用&strong&十分钟到二十分钟&/strong&。 这三个模型都是在 &a href=&/?target=http%3A//www.image-net.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ImageNet&i class=&icon-external&&&/i&&/a& 上面预训练过的,所以每一个模型都可以说是身经百战,通过这三个老司机导出的特征向量,可以高度概括一张图片有哪些内容。&/p&&p&最后导出的 h5 文件包括三个 numpy 数组:&br&&/p&&ul&&li&train (2)&/li&&li&test (1)&/li&&li&label (25000,)&/li&&/ul&&p&如果你不想自己计算特征向量,可以直接在这里下载导出的文件:&a href=&/?target=https%3A///ypwhs/dogs_vs_cats/releases/tag/gap& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub releases&i class=&icon-external&&&/i&&/a&&a href=&/?target=https%3A///s/1pK7psxX%23list/path%3D%252Fdataset%252FDogs%2520vs%2520Cats& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&百度云&i class=&icon-external&&&/i&&/a&&/p&&p&参考资料:&/p&&ul&&li&&a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ResNet&i class=&icon-external&&&/i&&/a& 15.12&/li&&li&&a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Inception v3&i class=&icon-external&&&/i&&/a& 15.12&/li&&li&&a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Xception&i class=&icon-external&&&/i&&/a& 16.10&/li&&/ul&&h1&载入特征向量&/h1&&p&经过上面的代码以后,我们获得了三个特征向量文件,分别是:&/p&&ul&&li&gap_ResNet50.h5&/li&&li&gap_InceptionV3.h5&/li&&li&gap_Xception.h5&/li&&/ul&&p&我们需要载入这些特征向量,并且将它们合成一条特征向量,然后记得把 X 和 y 打乱,不然之后我们设置validation_split的时候会出问题。这里设置了 numpy 的随机数种子为2017,这样可以确保每个人跑这个代码,输出都能是一样的结果。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&h5py&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span& &span class=&kn&&as&/span& &span class=&nn&&np&/span&
&span class=&kn&&from&/span& &span class=&nn&&sklearn.utils&/span& &span class=&kn&&import&/span& &span class=&n&&shuffle&/span&
&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&seed&/span&&span class=&p&&(&/span&&span class=&mi&&2017&/span&&span class=&p&&)&/span&
&span class=&n&&X_train&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&n&&X_test&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&filename&/span& &span class=&ow&&in&/span& &span class=&p&&[&/span&&span class=&s2&&&gap_ResNet50.h5&&/span&&span class=&p&&,&/span& &span class=&s2&&&gap_Xception.h5&&/span&&span class=&p&&,&/span& &span class=&s2&&&gap_InceptionV3.h5&&/span&&span class=&p&&]:&/span&
&span class=&k&&with&/span& &span class=&n&&h5py&/span&&span class=&o&&.&/span&&span class=&n&&File&/span&&span class=&p&&(&/span&&span class=&n&&filename&/span&&span class=&p&&,&/span& &span class=&s1&&'r'&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&h&/span&&span class=&p&&:&/span&
&span class=&n&&X_train&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&h&/span&&span class=&p&&[&/span&&span class=&s1&&'train'&/span&&span class=&p&&]))&/span&
&span class=&n&&X_test&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&h&/span&&span class=&p&&[&/span&&span class=&s1&&'test'&/span&&span class=&p&&]))&/span&
&span class=&n&&y_train&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&h&/span&&span class=&p&&[&/span&&span class=&s1&&'label'&/span&&span class=&p&&])&/span&
&span class=&n&&X_train&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&concatenate&/span&&span class=&p&&(&/span&&span class=&n&&X_train&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&X_test&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&concatenate&/span&&span class=&p&&(&/span&&span class=&n&&X_test&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&X_train&/span&&span class=&p&&,&/span& &span class=&n&&y_train&/span& &span class=&o&&=&/span& &span class=&n&&shuffle&/span&&span class=&p&&(&/span&&span class=&n&&X_train&/span&&span class=&p&&,&/span& &span class=&n&&y_train&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&构建模型&br&&/p&&p&模型的构建很简单,直接 dropout 然后分类就好了。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&keras.models&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&kn&&from&/span& &span class=&nn&&keras.layers&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&seed&/span&&span class=&p&&(&/span&&span class=&mi&&2017&/span&&span class=&p&&)&/span&
&span class=&n&&input_tensor&/span& &span class=&o&&=&/span& &span class=&n&&Input&/span&&span class=&p&&(&/span&&span class=&n&&X_train&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:])&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&Dropout&/span&&span class=&p&&(&/span&&span class=&mf&&0.5&/span&&span class=&p&&)(&/span&&span class=&n&&input_tensor&/span&&span class=&p&&)&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&Dense&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&activation&/span&&span class=&o&&=&/span&&span class=&s1&&'sigmoid'&/span&&span class=&p&&)(&/span&&span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&n&&model&/span& &span class=&o&&=&/span& &span class=&n&&Model&/span&&span class=&p&&(&/span&&span class=&n&&input_tensor&/span&&span class=&p&&,&/span& &span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&n&&optimizer&/span&&span class=&o&&=&/span&&span class=&s1&&'adadelta'&/span&&span class=&p&&,&/span&
&span class=&n&&loss&/span&&span class=&o&&=&/span&&span class=&s1&&'binary_crossentropy'&/span&&span class=&p&&,&/span&
&span class=&n&&metrics&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&s1&&'accuracy'&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&p&&br&我们还可以对模型进行可视化:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&digraph G{
node [shape=record]
a[label=&ResNet50|{input:|output:}|{(224, 224, 3)|(2048)}&]
b[label=&InceptionV3|{input:|output:}|{(299, 299, 3)|(2048)}&]
c[label=&Xception|{input:|output:}|{(299, 299, 3)|(2048)}&]
Merge[label=&Merge|{input:|output:}|{(3, 2048)|(6144)}&]
Dropout[label=&Dropout|Rate:|0.5&]
Output[label=&Output|{input:|output:}|{(6144)|(1)}&]
Image -& a -& Merge
Image -& b -& Merge
Image -& c -& Merge
Merge -& Dropout -& Output
&/code&&/pre&&/div&&br&&figure&&img src=&/50/v2-00d1cf5bd904ada446104_b.png& data-rawwidth=&1870& data-rawheight=&1008& class=&origin_image zh-lightbox-thumb& width=&1870& data-original=&/50/v2-00d1cf5bd904ada446104_r.png&&&/figure&&br&&p&训练模型&br&&/p&&p&模型构件好了以后,我们就可以进行训练了,这里我们设置验证集大小为 20% ,也就是说训练集是20000张图,验证集是5000张图。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&fit&/span&&span class=&p&&(&/span&&span class=&n&&X_train&/span&&span class=&p&&,&/span& &span class=&n&&y_train&/span&&span class=&p&&,&/span& &span class=&n&&batch_size&/span&&span class=&o&&=&/span&&span class=&mi&&128&/span&&span class=&p&&,&/span& &span class=&n&&nb_epoch&/span&&span class=&o&&=&/span&&span class=&mi&&8&/span&&span class=&p&&,&/span& &span class=&n&&validation_split&/span&&span class=&o&&=&/span&&span class=&mf&&0.2&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&Train on 20000 samples, validate on 5000 samples
[==============================] - 1s - loss: 0.1193 - acc: 0.9591 - val_loss: 0.0283 - val_acc: 0.9936
[==============================] - 0s - loss: 0.0319 - acc: 0.9898 - val_loss: 0.0181 - val_acc: 0.9952
[==============================] - 0s - loss: 0.0252 - acc: 0.9916 - val_loss: 0.0172 - val_acc: 0.9934
[==============================] - 0s - loss: 0.0214 - acc: 0.9936 - val_loss: 0.0140 - val_acc: 0.9956
[==============================] - 0s - loss: 0.0200 - acc: 0.9926 - val_loss: 0.0139 - val_acc: 0.9954
[==============================] - 0s - loss: 0.0189 - acc: 0.9933 - val_loss: 0.0129 - val_acc: 0.9956
[==============================] - 0s - loss: 0.0170 - acc: 0.9946 - val_loss: 0.0123 - val_acc: 0.9960
[==============================] - 0s - loss: 0.0163 - acc: 0.9945 - val_loss: 0.0119 - val_acc: 0.9958
&/code&&/pre&&/div&&p&我们可以看到,训练的过程很快,十秒以内就能训练完,准确率也很高,在验证集上最高达到了99.6%的准确率,这相当于一千张图只错了4张,可以说比我还厉害。&br&&/p&&h1&预测测试集&/h1&&p&模型训练好以后,我们就可以对测试集进行预测,然后提交到 kaggle 上看看最终成绩了。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&y_pred&/span& &span class=&o&&=&/span& &span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&predict&/span&&span class=&p&&(&/span&&span class=&n&&X_test&/span&&span class=&p&&,&/span& &span class=&n&&verbose&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&y_pred&/span& &span class=&o&&=&/span& &span class=&n&&y_pred&/span&&span class=&o&&.&/span&&span class=&n&&clip&/span&&span class=&p&&(&/span&&span class=&nb&&min&/span&&span class=&o&&=&/span&&span class=&mf&&0.005&/span&&span class=&p&&,&/span& &span class=&nb&&max&/span&&span class=&o&&=&/span&&span class=&mf&&0.995&/span&&span class=&p&&)&/span&
&span class=&kn&&import&/span& &span class=&nn&&pandas&/span& &span class=&kn&&as&/span& &span class=&nn&&pd&/span&
&span class=&kn&&from&/span& &span class=&nn&&keras.preprocessing.image&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&n&&df&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&read_csv&/span&&span class=&p&&(&/span&&span class=&s2&&&sample_submission.csv&&/span&&span class=&p&&)&/span&
&span class=&n&&gen&/span& &span class=&o&&=&/span& &span class=&n&&ImageDataGenerator&/span&&span class=&p&&()&/span&
&span class=&n&&test_generator&/span& &span class=&o&&=&/span& &span class=&n&&gen&/span&&span class=&o&&.&/span&&span class=&n&&flow_from_directory&/span&&span class=&p&&(&/span&&span class=&s2&&&test2&&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&mi&&224&/span&&span class=&p&&,&/span& &span class=&mi&&224&/span&&span class=&p&&),&/span& &span class=&n&&shuffle&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&,&/span&
&span class=&n&&batch_size&/span&&span class=&o&&=&/span&&span class=&mi&&16&/span&&span class=&p&&,&/span& &span class=&n&&class_mode&/span&&span class=&o&&=&/span&&span class=&bp&&None&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span&&span class=&p&&,&/span& &span class=&n&&fname&/span& &span class=&ow&&in&/span& &span class=&nb&&enumerate&/span&&span class=&p&&(&/span&&span class=&n&&test_generator&/span&&span class=&o&&.&/span&&span class=&n&&filenames&/span&&span class=&p&&):&/span&
&span class=&n&&index&/span& &span class=&o&&=&/span& &span class=&nb&&int&/span&&span class=&p&&(&/span&&span class=&n&&fname&/span&&span class=&p&&[&/span&&span class=&n&&fname&/span&&span class=&o&&.&/span&&span class=&n&&rfind&/span&&span class=&p&&(&/span&&span class=&s1&&'/'&/span&&span class=&p&&)&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&:&/span&&span class=&n&&fname&/span&&span class=&o&&.&/span&&span class=&n&&rfind&/span&&span class=&p&&(&/span&&span class=&s1&&'.'&/span&&span class=&p&&)])&/span&
&span class=&n&&df&/span&&span class=&o&&.&/span&&span class=&n&&set_value&/span&&span class=&p&&(&/span&&span class=&n&&index&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'label'&/span&&span class=&p&&,&/span& &span class=&n&&y_pred&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&])&/span&
&span class=&n&&df&/span&&span class=&o&&.&/span&&span class=&n&&to_csv&/span&&span class=&p&&(&/span&&span class=&s1&&'pred.csv'&/span&&span class=&p&&,&/span& &span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&bp&&None&/span&&span class=&p&&)&/span&
&span class=&n&&df&/span&&span class=&o&&.&/span&&span class=&n&&head&/span&&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&预测这里我们用到了一个小技巧,我们将每个预测值限制到了 [0.005, 0.995] 个区间内,这个原因很简单,kaggle 官方的评估标准是 &a href=&/?target=https%3A///c/dogs-vs-cats-redux-kernels-edition/details/evaluation& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LogLoss&i class=&icon-external&&&/i&&/a&,对于预测正确的样本,0.995 和 1 相差无几,但是对于预测错误的样本,0 和 0.005 的差距非常大,是 15 和 2 的差别。参考 &a href=&/?target=https%3A///wiki/LogLoss& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LogLoss 如何处理无穷大问题&i class=&icon-external&&&/i&&/a&,下面的表达式就是二分类问题的 LogLoss 定义。&/p&&p&$$\textrm{LogLoss} = - \frac{1}{n} \sum_{i=1}^n \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)\right]$$&/p&&figure&&img src=&/50/v2-57e9255adb157f21753cda07184edb56_b.png& data-rawwidth=&866& data-rawheight=&130& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&/50/v2-57e9255adb157f21753cda07184edb56_r.png&&&/figure&&p&还有一个值得一提的地方就是测试集的文件名不是按 1, 2, 3 这样排的,而是按下面的顺序排列的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&['test/1.jpg',
'test/10.jpg',
'test/100.jpg',
'test/1000.jpg',
'test/10000.jpg',
'test/10001.jpg',
'test/10002.jpg',
'test/10003.jpg',
&/code&&/pre&&/div&&p&因此我们需要对每个文件名进行处理,然后赋值到 df 里,最后导出为 csv 文件。&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& id label
9 10 0.005
&/code&&/pre&&/div&&h1&总结&/h1&&p&我们可以从上图中看到,模型对于前十个样本都给出了很肯定的预测,提交到 kaggle 以后,得分也是很棒,0.04141,在全球排名中可以排到20/1314。我们如果要继续优化模型表现,可以使用更棒的预训练模型来导出特征向量,或者对预训练模型进行微调(fine-tune),或者进行数据增强(data augmentation)等。&/p&&h2&参考链接:&/h2&&p&&a href=&/?target=http%3A//keras-cn.readthedocs.io/en/latest/blog/image_classification_using_very_little_data/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&面向小数据集构建图像分类模型&i class=&icon-external&&&/i&&/a&&/p&&h1&作者&/h1&&p&&a href=&/people/fcd4e8a1b551& data-hash=&fcd4e8a1b551& class=&member_mention& data-editable=&true& data-title=&@杨培文& data-hovercard=&p$b$fcd4e8a1b551&&@杨培文&/a& , Udacity &a href=&/?target=http%3A///course/machine-learning-engineer-nanodegree--nd009-cn-advanced& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习&i class=&icon-external&&&/i&&/a&项目 reviewer&br&本文涉及的所有代码都可以在这里下载: &a href=&/?target=https%3A///ypwhs/dogs_vs_cats& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/ypwhs/dogs_v&/span&&span class=&invisible&&s_cats&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&strong&文章可以转载,但必须注明作者和出处。&/strong&&/p&
本文会通过 Keras 搭建一个深度卷积神经网络来识别一张图片是猫还是狗,在验证集上的准确率可以达到99.6%,建议使用显卡来运行该项目。本项目使用的 Keras 版本是1.2.2。 提示:文末附上所有代码的下载地址。猫狗大战数据集来自 kaggle 上的一个竞赛:
&figure&&img src=&/50/v2-5e9231fdcffd548a9981_b.jpg& data-rawwidth=&1280& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-5e9231fdcffd548a9981_r.jpg&&&/figure&&p&原文:&a href=&/?target=https%3A///technology-invention-and-more/how-to-build-a-multi-layered-neural-network-in-python-53ec3d1d326a%23.7yns8c5af& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to build a multi-layered neural network in Python&i class=&icon-external&&&/i&&/a&&/p&&p&作者:&a href=&/?target=https%3A///%40miloharper%3Fsource%3Dpost_header_lockup& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Milo Spencer-Harper&i class=&icon-external&&&/i&&/a&&/p&&p&翻译:Kaiser(&a href=&/?target=http%3A///kaiser0730& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&王司图&i class=&icon-external&&&/i&&/a&)&/p&&p&代码可调版本:&a href=&/?target=https%3A//jizhi.im/blog/post/nn_py_ml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python搭建多层神经网络 - 集智专栏&i class=&icon-external&&&/i&&/a&&/p&&}

我要回帖

更多关于 gb t 10002.2 2003 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信