摘??要
近些年大數據人工智能等技術發展迅速,我國工業正努力從“制造”邁向“智造”實現新跨越。神經網絡(NeuronNetwork)是一種計算模型,通過大量數據的學習,來發現數據之間的模式和規律,模仿人腦神經元的工作方式。隨著算力的提升和算法的不斷成熟圖像識別技術已經完全融入到生活中,卷積神經網絡算法在識別領域尤為成熟,卷積神經網絡模型CNN通常用于影像識別案例,通過模型訓練計算機也能像大腦一樣抓取圖像特征識別出圖片影像中的物體符號等,比如人臉識別中快速匹配身份信息,天氣識別等。一直以來,人類關注氣象預報都是其中的一個熱點。對于農業、交通、旅游等領域,準確的氣象預報必不可少。隨著技術的發展,氣象預測領域廣泛使用神經網絡。
本文將以卷積神經網絡為基礎,對天氣預測方法進行探討,并對其優點及局限性進行分析。在氣象預報中,利用歷史氣象資料作為輸入,通過訓練神經網絡,預測未來幾個小時的天氣狀況、研究天氣變化規律。該系統對數據進行預處理后,利用處理后的數據構建預測模型,自動收集包括時間、最高溫度、最低溫度、天氣狀況等在內的多個氣象數據源的歷史和實時氣象數據。通過CNN卷積層識別圖像特定線條,池化層減小圖像數據量提升辨識率,全連接層來做最后的識別判斷進而預測天氣。
本系統主要功能是基于卷積神經網絡算法實現對天氣場景的實時預測,技術上基于TensorFlow框架前端采用了廣泛使用的HTML與JQuery,后端基于Django框架搭建后端管理。
關鍵詞:卷積神經網絡算法;爬蟲;天氣識別;可視化
核心算法代碼分享如下:
import requests
from bs4 import BeautifulSoup
import csv
import jsonfrom lxml import etreedef getHTMLtext(url):"""請求獲得網頁內容"""try:r = requests.get(url, timeout = 30)r.raise_for_status()r.encoding = r.apparent_encodingprint("成功訪問")return r.textexcept:print("訪問錯誤")return" "def get_content(html):"""處理得到有用信息保存數據文件"""final = [] # 初始化一個列表保存數據bs = BeautifulSoup(html, "html.parser") # 創建BeautifulSoup對象body = bs.bodydata = body.find('div', {'id': '7d'}) # 找到div標簽且id = 7d# 下面爬取當天的數據data2 = body.find_all('div',{'class':'left-div'})text = data2[2].find('script').string# print(data2[1])# print(text)text = text[text.index('=')+1 :-2] # 移除改var data=將其變為json數據# print(text)jd = json.loads(text)# print(jd)dayone = jd['od']['od2'] # 找到當天的數據# print(dayone)final_day = [] # 存放當天的數據count = 0for i in dayone:temp = []if count <= 24:temp.append(i['od21']) # 添加時間temp.append(i['od22']) # 添加當前時刻溫度temp.append(i['od24']) # 添加當前時刻風力方向temp.append(i['od25']) # 添加當前時刻風級temp.append(i['od26']) # 添加當前時刻降水量temp.append(i['od27']) # 添加當前時刻相對濕度temp.append(i['od28']) # 添加當前時刻控制質量# print(temp)final_day.append(temp)count = count +1# 下面爬取7天的數據ul = data.find('ul') # 找到所有的ul標簽li = ul.find_all('li') # 找到左右的li標簽i = 0 # 控制爬取的天數for day in li: # 遍歷找到的每一個liif i < 7 and i > 0:temp = [] # 臨時存放每天的數據date = day.find('h1').string # 得到日期date = date[0:date.index('日')] # 取出日期號temp.append(date)inf = day.find_all('p') # 找出li下面的p標簽,提取第一個p標簽的值,即天氣temp.append(inf[0].string)tem_low = inf[1].find('i').string # 找到最低氣溫if inf[1].find('span') is None: # 天氣預報可能沒有最高氣溫tem_high = Noneelse:tem_high = inf[1].find('span').string # 找到最高氣溫temp.append(tem_low[:-1])if tem_high[-1] == '℃':temp.append(tem_high[:-1])else:temp.append(tem_high)wind = inf[2].find_all('span') # 找到風向for j in wind:temp.append(j['title'])wind_scale = inf[2].find('i').string # 找到風級index1 = wind_scale.index('級')temp.append(int(wind_scale[index1-1:index1]))final.append(temp)i = i + 1return final_day,final#print(final)