python線(xiàn)性卷積函數(shù) 線(xiàn)性卷積的求法

pytorch全連接層計(jì)算時(shí)間短

1.讀取數(shù)據(jù)

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),閩侯企業(yè)網(wǎng)站建設(shè),閩侯品牌網(wǎng)站建設(shè),網(wǎng)站定制,閩侯網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,閩侯網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

首先,引入必要的頭文件,并從文件中讀入數(shù)據(jù):

import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import torch import torch.nn as nn from torch.autograd import Variable df = pd.read_csv('data/AirPassengers.csv') plt.plot(df['#Passengers']) plt.show()

程序輸出如下圖所示:

2.歸一化

無(wú)論機(jī)器學(xué)習(xí)還是深度學(xué)習(xí),使用哪一種框架,歸一化都是必要環(huán)節(jié)。歸一化的目標(biāo)是將每一維特征壓縮到一定范圍之內(nèi),以免不同特征因取值范圍不同而影響其權(quán)重。非常大或非常小的值搭配上不恰當(dāng)?shù)膶W(xué)習(xí)率,往往使得收斂過(guò)慢,或者因每次調(diào)整的波動(dòng)太大最終無(wú)法收斂。歸一化去除了這些不穩(wěn)定因素。

歸一化的具體做法是將某一列特征轉(zhuǎn)換成均值為 0、標(biāo)準(zhǔn)差為1的數(shù)據(jù),在圖像處理過(guò)程中,也常把0-255之間的顏色值轉(zhuǎn)換為0-1之間的小數(shù)。

本例中使用了均值和標(biāo)準(zhǔn)差編寫(xiě)了歸一化和反歸一化函數(shù):

def feature_normalize(data): mu = np.mean(data,axis=0) # 均值 std = np.std(data,axis=0) # 標(biāo)準(zhǔn)差 return (data - mu)/std def feature_unnormalize(data, arr): mu = np.mean(data,axis=0) std = np.std(data,axis=0) return arr * std + mu

3.提取新特征

提取新特征是指從現(xiàn)有特征中提取更多可以代入模型的信息,從而生成新特征,本例中的數(shù)據(jù)包括兩列,第一列“Month”是字符串類(lèi)型的時(shí)間,第二列“#Passengers”是乘客量,也就是需要預(yù)測(cè)的數(shù)據(jù)y。下面通過(guò)拆分和類(lèi)型轉(zhuǎn)換,從第一列中提取具體的年“year”和月“mon”,將索引列變?yōu)樘卣鳌皒”,并使用上面定義的函數(shù)實(shí)現(xiàn)歸一化功能。

df['year'] = df['Month'].apply(lambda x: float(x[:4])) df['mon'] = df['Month'].apply(lambda x: float(x[5:])) df['x'] = feature_normalize(df.index) df['y'] = feature_normalize(df['#Passengers']) df['year'] = feature_normalize(df['year']) df['mon'] = feature_normalize(df['mon']) df['real'] = feature_unnormalize(df['#Passengers'], df['y'])

處理后的數(shù)據(jù)如下圖所示:

4.處理缺失值和異常值

處理缺失值和異常值也是特征工程的重要環(huán)節(jié),有時(shí)花費(fèi)的時(shí)間比建模還多。處理缺失值的常用方法是刪除重要特征缺失的item,或者用均值,前后值填充;處理異常值是監(jiān)測(cè)數(shù)據(jù)中不正常的值,并做出相應(yīng)處理,由于本例中數(shù)據(jù)比較“干凈”,無(wú)需做缺失值和異常值處理。

5.向量化

向量化是將讀出的數(shù)據(jù)轉(zhuǎn)換成模型需要的數(shù)據(jù)格式,根據(jù)不同的模型做法不同,本例中的向量化將在后面的模型部分實(shí)現(xiàn)。

6.切分訓(xùn)練集和測(cè)試集

訓(xùn)練前還需要把數(shù)據(jù)切分成訓(xùn)練集和測(cè)試集,以避免過(guò)擬合,本例中將70%的數(shù)據(jù)用于訓(xùn)練,最終模型將對(duì)所有數(shù)據(jù)預(yù)測(cè)并做圖。

TRAIN_PERCENT = 0.7 train_size = int(len(df) * TRAIN_PERCENT) train = df[:train_size]

擬合直線(xiàn)

擬合程序分成三部分:定義模型、優(yōu)化器和誤差函數(shù);訓(xùn)練模型;預(yù)測(cè)并做圖。

1.定義模型、優(yōu)化器、誤差函數(shù)

模型繼承自mm.Module,并實(shí)現(xiàn)了兩個(gè)核心函數(shù),init用于初始化模型結(jié)構(gòu),forward用于定義前向傳播的過(guò)程。本例中實(shí)現(xiàn)了最為簡(jiǎn)單的模型,其中只包含一個(gè)全連接層,使用nn.Linear定義,torch.nn中定義了常用的網(wǎng)絡(luò)層實(shí)現(xiàn)。

class LinearRegression(nn.Module): def __init__(self): super(LinearRegression, self).__init__() self.linear = nn.Linear(1, 1) # 輸入和輸出的維度都是1 def forward(self, x): x = self.linear(x) return x model = LinearRegression() criterion = nn.MSELoss() # 損失函數(shù):均方誤差 optimizer = torch.optim.SGD(model.parameters(), lr=0.001) # 優(yōu)化算法:隨機(jī)梯度下降

損失函數(shù)使用了均方誤差 MSELoss,它計(jì)算的是預(yù)測(cè)值與真值之差平方的期望值,MSELoss也是回歸中最常用的損失函數(shù),torch.nn中實(shí)現(xiàn)了一些常用的損失函數(shù),可以直接使用,

優(yōu)化的目標(biāo)是更好地更新參數(shù),使模型快速收斂。優(yōu)化算法就是調(diào)整模型參數(shù)更新的策略,優(yōu)化器是優(yōu)化算法的具體實(shí)現(xiàn)。本例中優(yōu)化器optimizer使用了最基礎(chǔ)的隨機(jī)梯度下降optim.SGD優(yōu)化方法,torch.optim中定義了常用的優(yōu)化器。在參數(shù)中設(shè)置了學(xué)習(xí)率為0.001,并將模型的參數(shù)句柄傳入優(yōu)化器,優(yōu)化器后期將調(diào)整這些參數(shù)。

注意:學(xué)習(xí)率是一個(gè)重要參數(shù),最好從小到大設(shè)置,如果設(shè)置太大,可能造成每次對(duì)參數(shù)修改過(guò)大,造成抖動(dòng),使得最終無(wú)法收斂。

2.訓(xùn)練模型

訓(xùn)練之前,先把數(shù)據(jù)轉(zhuǎn)換成模型需要的數(shù)據(jù)格式,將pandas的數(shù)據(jù)格式轉(zhuǎn)換為float32格式的Tensor張量,然后用unsqueeze擴(kuò)展維度到2維(unsqueeze已在上一篇詳細(xì)介紹)。

x = torch.unsqueeze(torch.tensor(np.array(train['x']), dtype=torch.float32), dim=1) y = torch.unsqueeze(torch.tensor(np.array(train['y']), dtype=torch.float32), dim=1) for e in range(10000): inputs = Variable(x) target = Variable(y) out = model(inputs) # 前向傳播 loss = criterion(out, target) # 計(jì)算誤差 optimizer.zero_grad() # 梯度清零 loss.backward() # 后向傳播 optimizer.step() # 調(diào)整參數(shù) if (e+1) % 1000 == 0: # 每1000次迭代打印一次誤差值 print('Epoch:{}, Loss:{:.5f}'.format(e+1, loss.item()))

后面的循環(huán)部分進(jìn)行了10000次迭代,也就是說(shuō)將所有數(shù)據(jù)放進(jìn)模型訓(xùn)練了10000次,從而使模型收斂。每一次循環(huán)之中,將x,y分別轉(zhuǎn)換成變量Variable格式。

然后進(jìn)行前先傳播,model(inputs)調(diào)用的是nn.Module 的call()函數(shù)(call是Python類(lèi)中的一個(gè)特殊方法,如果類(lèi)中定義了此方法,可以通過(guò)實(shí)例名加括號(hào)的方式調(diào)用該方法)父類(lèi)的call()調(diào)用了前向函數(shù)forward()將數(shù)據(jù)傳入層中處理。

接下來(lái)是誤差函數(shù)和優(yōu)化器配合調(diào)整模型參數(shù),此處到底修改了哪些值,又是如何修改的,是最難理解的部分。先通過(guò)定義的誤差函數(shù)計(jì)算誤差,從loss值可以看到每一次迭代之后誤差的情況。

下一步是優(yōu)化器清零,調(diào)用優(yōu)化器的zero_grad方法,清除了model.parameters中的梯度grad。

之后是反向傳播,誤差函數(shù)的backward,調(diào)用了torch.autograd.backward()函數(shù),backward()是上面定義的forward()的反向過(guò)程,對(duì)每層每一個(gè)參數(shù)求導(dǎo),并填充在model.parameters的grad中。

最后調(diào)用優(yōu)化器的step方法(step的具體實(shí)現(xiàn)可參考torch源碼中optim/sgd.py中的step函數(shù)),它使用model.parameters中的梯度grad和設(shè)置的學(xué)習(xí)率、動(dòng)量等參數(shù)計(jì)算出model.parameters的新data值,形如:weight = weight - learning_rate * gradient。

可以說(shuō),最后幾步都是針對(duì)model.parameters模型參數(shù)的修改。整個(gè)過(guò)程可以通過(guò)跟蹤model.parameters的data和grad的內(nèi)容變化來(lái)分析。方法如下:

for p in model.parameters(): print(p.data, p.grad)

也可以在程序中加入以下代碼,用于跟蹤后向傳播的過(guò)程:

f = loss.grad_fn while True: print(f) if len(f.next_functions) == 0: break f = f.next_functions[0][0]

3.預(yù)測(cè)和做圖

本例中用70%數(shù)據(jù)作為訓(xùn)練集,用所有數(shù)據(jù)作為測(cè)試集,因此,用全部數(shù)據(jù)重新計(jì)算了x,y值;使用eval函數(shù)將模型轉(zhuǎn)換為測(cè)試模式(有一些層在訓(xùn)練模型和預(yù)測(cè)模型時(shí)有差別);將數(shù)據(jù)代入模型預(yù)測(cè),并轉(zhuǎn)換成numpy格式作圖顯示。

x = torch.unsqueeze(torch.tensor(np.array(df['x']), dtype=torch.float32), dim=1) y = torch.unsqueeze(torch.tensor(np.array(df['y']), dtype=torch.float32), dim=1) model.eval() #將模型變?yōu)闇y(cè)試模式 predict = model(Variable(x)) # 預(yù)測(cè) predict = predict.data.numpy() # 轉(zhuǎn)換成numpy格式 plt.plot(x.numpy(), y.numpy(), 'y') plt.plot(x.numpy(), predict) plt.show()

程序運(yùn)行結(jié)果如下圖所示,可以看到模型用一條直線(xiàn)擬合曲線(xiàn),在前70%的訓(xùn)練數(shù)據(jù)中表現(xiàn)更好。

多特征擬合

直線(xiàn)擬合的原理是y=kx+b,求斜率k和截距b。其中的x是數(shù)據(jù)產(chǎn)生的時(shí)間,從數(shù)據(jù)表的索引號(hào)轉(zhuǎn)換求得,y是乘客量。還可以使用另一些方法進(jìn)一步擬合曲線(xiàn)。如:

方法一曲線(xiàn)擬合:從圖像數(shù)據(jù)可以看出,乘客數(shù)據(jù)走勢(shì)更擬合一條微微上翹的曲線(xiàn),設(shè)y是x的多項(xiàng)式函數(shù),可使用多項(xiàng)式擬合:y=ax3+bx2+cx+d。

方法二多特征擬合:代入更多條件,比如利用年份、月份作為參數(shù)代入

Python beautifulsoup 獲取標(biāo)簽中的值 怎么獲取?

age = soup.find(attrs={"class":"age"}) #你這里find只要一個(gè)attrs參數(shù)不會(huì)報(bào)錯(cuò)。

if age == None: #簡(jiǎn)單點(diǎn)可以用 if not age:

print u'沒(méi)有找到'

else:

soup.find(attrs={"class":"name"})

#否則用findAll找出所有具有這個(gè)class的tr

tr = html.find("tr", attrs={"class":"show_name"})

tds = tr.findAll("td")

for td in tds:

print td.string # 或許不是string屬性,你可以用dir(td)看看有哪些可用的。

擴(kuò)展資料:

1、如果是函數(shù)定義中參數(shù)前的*表示的是將調(diào)用時(shí)的多個(gè)參數(shù)放入元組中,**則表示將調(diào)用函數(shù)時(shí)的關(guān)鍵字參數(shù)放入一個(gè)字典中。

1)如定義以下函數(shù):

def func(*args):print(args)

當(dāng)用func(1,2,3)調(diào)用函數(shù)時(shí),參數(shù)args就是元組(1,2,3)

2)如定義以下函數(shù):

def func(**args):print(args)

當(dāng)用func(a=1,b=2)調(diào)用函數(shù)時(shí),參數(shù)args將會(huì)是字典{'a':1,'b':2}

學(xué)python的同時(shí)一定會(huì)接觸到其他技術(shù),畢竟光會(huì)python這門(mén)語(yǔ)言是不夠的,要看用它來(lái)做什么。比如說(shuō)用 python做爬蟲(chóng),就必須接觸到html, http等知識(shí)。

python是現(xiàn)在最火的數(shù)據(jù)分析工具語(yǔ)言python的進(jìn)階的路線(xiàn)是數(shù)據(jù)清洗,爬蟲(chóng),數(shù)據(jù)容器,之后是卷積,線(xiàn)性分析,和機(jī)器學(xué)習(xí),區(qū)塊連,金融方面的量化等高端進(jìn)階。

python數(shù)據(jù)分析與應(yīng)用第三章代碼3-5的數(shù)據(jù)哪來(lái)的

savetxt

import numpy as np

i2 = np.eye(2)

np.savetxt("eye.txt", i2)

3.4 讀入CSV文件

# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True) #index從0開(kāi)始

3.6.1 算術(shù)平均值

np.mean(c) = np.average(c)

3.6.2 加權(quán)平均值

t = np.arange(len(c))

np.average(c, weights=t)

3.8 極值

np.min(c)

np.max(c)

np.ptp(c) 最大值與最小值的差值

3.10 統(tǒng)計(jì)分析

np.median(c) 中位數(shù)

np.msort(c) 升序排序

np.var(c) 方差

3.12 分析股票收益率

np.diff(c) 可以返回一個(gè)由相鄰數(shù)組元素的差

值構(gòu)成的數(shù)組

returns = np.diff( arr ) / arr[ : -1] #diff返回的數(shù)組比收盤(pán)價(jià)數(shù)組少一個(gè)元素

np.std(c) 標(biāo)準(zhǔn)差

對(duì)數(shù)收益率

logreturns = np.diff( np.log(c) ) #應(yīng)檢查輸入數(shù)組以確保其不含有零和負(fù)數(shù)

where 可以根據(jù)指定的條件返回所有滿(mǎn)足條件的數(shù)

組元素的索引值。

posretindices = np.where(returns 0)

np.sqrt(1./252.) 平方根,浮點(diǎn)數(shù)

3.14 分析日期數(shù)據(jù)

# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True)

print "Dates =", dates

def datestr2num(s):

return datetime.datetime.strptime(s, "%d-%m-%Y").date().weekday()

# 星期一 0

# 星期二 1

# 星期三 2

# 星期四 3

# 星期五 4

# 星期六 5

# 星期日 6

#output

Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0.

1. 2. 3. 4.]

averages = np.zeros(5)

for i in range(5):

indices = np.where(dates == i)

prices = np.take(close, indices) #按數(shù)組的元素運(yùn)算,產(chǎn)生一個(gè)數(shù)組作為輸出。

a = [4, 3, 5, 7, 6, 8]

indices = [0, 1, 4]

np.take(a, indices)

array([4, 3, 6])

np.argmax(c) #返回的是數(shù)組中最大元素的索引值

np.argmin(c)

3.16 匯總數(shù)據(jù)

# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

#得到第一個(gè)星期一和最后一個(gè)星期五

first_monday = np.ravel(np.where(dates == 0))[0]

last_friday = np.ravel(np.where(dates == 4))[-1]

#創(chuàng)建一個(gè)數(shù)組,用于存儲(chǔ)三周內(nèi)每一天的索引值

weeks_indices = np.arange(first_monday, last_friday + 1)

#按照每個(gè)子數(shù)組5個(gè)元素,用split函數(shù)切分?jǐn)?shù)組

weeks_indices = np.split(weeks_indices, 5)

#output

[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])]

weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)

def summarize(a, o, h, l, c): #open, high, low, close

monday_open = o[a[0]]

week_high = np.max( np.take(h, a) )

week_low = np.min( np.take(l, a) )

friday_close = c[a[-1]]

return("APPL", monday_open, week_high, week_low, friday_close)

np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s") #指定了文件名、需要保存的數(shù)組名、分隔符(在這個(gè)例子中為英文標(biāo)點(diǎn)逗號(hào))以及存儲(chǔ)浮點(diǎn)數(shù)的格式。

0818b9ca8b590ca3270a3433284dd417.png

格式字符串以一個(gè)百分號(hào)開(kāi)始。接下來(lái)是一個(gè)可選的標(biāo)志字符:-表示結(jié)果左對(duì)齊,0表示左端補(bǔ)0,+表示輸出符號(hào)(正號(hào)+或負(fù)號(hào)-)。第三部分為可選的輸出寬度參數(shù),表示輸出的最小位數(shù)。第四部分是精度格式符,以”.”開(kāi)頭,后面跟一個(gè)表示精度的整數(shù)。最后是一個(gè)類(lèi)型指定字符,在例子中指定為字符串類(lèi)型。

numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)

def my_func(a):

... """Average first and last element of a 1-D array"""

... return (a[0] + a[-1]) * 0.5

b = np.array([[1,2,3], [4,5,6], [7,8,9]])

np.apply_along_axis(my_func, 0, b) #沿著X軸運(yùn)動(dòng),取列切片

array([ 4., 5., 6.])

np.apply_along_axis(my_func, 1, b) #沿著y軸運(yùn)動(dòng),取行切片

array([ 2., 5., 8.])

b = np.array([[8,1,7], [4,3,9], [5,2,6]])

np.apply_along_axis(sorted, 1, b)

array([[1, 7, 8],

[3, 4, 9],

[2, 5, 6]])

3.20 計(jì)算簡(jiǎn)單移動(dòng)平均線(xiàn)

(1) 使用ones函數(shù)創(chuàng)建一個(gè)長(zhǎng)度為N的元素均初始化為1的數(shù)組,然后對(duì)整個(gè)數(shù)組除以N,即可得到權(quán)重。如下所示:

N = int(sys.argv[1])

weights = np.ones(N) / N

print "Weights", weights

在N = 5時(shí),輸出結(jié)果如下:

Weights [ 0.2 0.2 0.2 0.2 0.2] #權(quán)重相等

(2) 使用這些權(quán)重值,調(diào)用convolve函數(shù):

c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)

sma = np.convolve(weights, c)[N-1:-N+1] #卷積是分析數(shù)學(xué)中一種重要的運(yùn)算,定義為一個(gè)函數(shù)與經(jīng)過(guò)翻轉(zhuǎn)和平移的另一個(gè)函數(shù)的乘積的積分。

t = np.arange(N - 1, len(c)) #作圖

plot(t, c[N-1:], lw=1.0)

plot(t, sma, lw=2.0)

show()

3.22 計(jì)算指數(shù)移動(dòng)平均線(xiàn)

指數(shù)移動(dòng)平均線(xiàn)(exponential moving average)。指數(shù)移動(dòng)平均線(xiàn)使用的權(quán)重是指數(shù)衰減的。對(duì)歷史上的數(shù)據(jù)點(diǎn)賦予的權(quán)重以指數(shù)速度減小,但永遠(yuǎn)不會(huì)到達(dá)0。

x = np.arange(5)

print "Exp", np.exp(x)

#output

Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]

Linspace 返回一個(gè)元素值在指定的范圍內(nèi)均勻分布的數(shù)組。

print "Linspace", np.linspace(-1, 0, 5) #起始值、終止值、可選的元素個(gè)數(shù)

#output

Linspace [-1. -0.75 -0.5 -0.25 0. ]

(1)權(quán)重計(jì)算

N = int(sys.argv[1])

weights = np.exp(np.linspace(-1. , 0. , N))

(2)權(quán)重歸一化處理

weights /= weights.sum()

print "Weights", weights

#output

Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]

(3)計(jì)算及作圖

c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)

ema = np.convolve(weights, c)[N-1:-N+1]

t = np.arange(N - 1, len(c))

plot(t, c[N-1:], lw=1.0)

plot(t, ema, lw=2.0)

show()

3.26 用線(xiàn)性模型預(yù)測(cè)價(jià)格

(x, residuals, rank, s) = np.linalg.lstsq(A, b) #系數(shù)向量x、一個(gè)殘差數(shù)組、A的秩以及A的奇異值

print x, residuals, rank, s

#計(jì)算下一個(gè)預(yù)測(cè)值

print np.dot(b, x)

3.28 繪制趨勢(shì)線(xiàn)

x = np.arange(6)

x = x.reshape((2, 3))

x

array([[0, 1, 2], [3, 4, 5]])

np.ones_like(x) #用1填充數(shù)組

array([[1, 1, 1], [1, 1, 1]])

類(lèi)似函數(shù)

zeros_like

empty_like

zeros

ones

empty

3.30 數(shù)組的修剪和壓縮

a = np.arange(5)

print "a =", a

print "Clipped", a.clip(1, 2) #將所有比給定最大值還大的元素全部設(shè)為給定的最大值,而所有比給定最小值還小的元素全部設(shè)為給定的最小值

#output

a = [0 1 2 3 4]

Clipped [1 1 2 2 2]

a = np.arange(4)

print a

print "Compressed", a.compress(a 2) #返回一個(gè)根據(jù)給定條件篩選后的數(shù)組

#output

[0 1 2 3]

Compressed [3]

b = np.arange(1, 9)

print "b =", b

print "Factorial", b.prod() #輸出數(shù)組元素階乘結(jié)果

#output

b = [1 2 3 4 5 6 7 8]

Factorial 40320

print "Factorials", b.cumprod()

#output

網(wǎng)站名稱(chēng):python線(xiàn)性卷積函數(shù) 線(xiàn)性卷積的求法
轉(zhuǎn)載注明:http://muchs.cn/article20/dosjsjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、微信公眾號(hào)、網(wǎng)站營(yíng)銷(xiāo)、小程序開(kāi)發(fā)域名注冊(cè)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司