Chainer:Chainer中的張量操作_第1頁
Chainer:Chainer中的張量操作_第2頁
Chainer:Chainer中的張量操作_第3頁
Chainer:Chainer中的張量操作_第4頁
Chainer:Chainer中的張量操作_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Chainer:Chainer中的張量操作1Chainer簡(jiǎn)介1.1Chainer的安裝與配置在開始使用Chainer之前,首先需要確保你的系統(tǒng)已經(jīng)安裝了Python,并且版本在3.5以上。Chainer支持在CPU和GPU上運(yùn)行,如果你的系統(tǒng)配備了NVIDIAGPU,安裝Chainer時(shí)還可以選擇支持GPU的版本。1.1.1安裝Chainer在命令行中,你可以使用pip來安裝Chainer。對(duì)于僅支持CPU的版本,可以運(yùn)行以下命令:pipinstallchainer如果要安裝支持GPU的版本,需要先安裝CUDA和cuDNN,然后運(yùn)行:pipinstallchainer-gpu1.1.2配置ChainerChainer的配置主要通過環(huán)境變量來設(shè)置,例如,你可以設(shè)置CHAINER_TYPE_CHECK來開啟類型檢查,這有助于在開發(fā)過程中發(fā)現(xiàn)潛在的錯(cuò)誤。importos

os.environ["CHAINER_TYPE_CHECK"]="1"此外,你還可以通過chainer.config模塊來設(shè)置全局配置,例如設(shè)置是否使用GPU:importchainer

chainer.config.use_cudnn='always'1.2Chainer的基本概念Chainer是一個(gè)動(dòng)態(tài)計(jì)算圖的深度學(xué)習(xí)框架,這意味著你可以在運(yùn)行時(shí)定義計(jì)算圖,而不是像TensorFlow那樣需要先定義圖再運(yùn)行。Chainer的核心概念包括變量(Variable)、函數(shù)(Function)和鏈(Chain)。1.2.1變量(Variable)在Chainer中,Variable是用于表示數(shù)據(jù)的類。它可以是NumPy數(shù)組或CuPy數(shù)組,這取決于你的計(jì)算是在CPU還是GPU上進(jìn)行。importchainer

importnumpyasnp

#創(chuàng)建一個(gè)Variable

x=chainer.Variable(np.array([1,2,3],dtype=np.float32))1.2.2函數(shù)(Function)Function類用于定義計(jì)算操作。Chainer提供了許多內(nèi)置的函數(shù),如F.relu、F.softmax等,你也可以定義自己的函數(shù)。importchainer.functionsasF

#使用內(nèi)置函數(shù)

y=F.relu(x)1.2.3鏈(Chain)Chain類用于組合多個(gè)函數(shù),形成一個(gè)模型。你可以將它看作是一個(gè)包含多個(gè)層的神經(jīng)網(wǎng)絡(luò)。importchainer.linksasL

importchainer

classMyChain(chainer.Chain):

def__init__(self):

super(MyChain,self).__init__()

withself.init_scope():

self.l1=L.Linear(100)

self.l2=L.Linear(100)

def__call__(self,x):

h=F.relu(self.l1(x))

returnself.l2(h)

model=MyChain()1.2.4訓(xùn)練模型在Chainer中,你可以使用chainer.training模塊來訓(xùn)練模型。首先,你需要定義一個(gè)優(yōu)化器,然后創(chuàng)建一個(gè)迭代器來處理數(shù)據(jù),最后,使用Trainer來運(yùn)行訓(xùn)練過程。importchainer.optimizersasO

optimizer=O.Adam()

optimizer.setup(model)

#假設(shè)我們有一個(gè)數(shù)據(jù)集

dataset=np.random.rand(100,100).astype(np.float32)

#創(chuàng)建迭代器

iterator=chainer.iterators.SerialIterator(dataset,batch_size=32)

#創(chuàng)建訓(xùn)練器

updater=chainer.training.StandardUpdater(iterator,optimizer)

trainer=chainer.training.Trainer(updater,(10,'epoch'))

#開始訓(xùn)練

trainer.run()通過以上步驟,你已經(jīng)了解了Chainer的基本安裝、配置和使用方法。接下來,你可以開始探索Chainer的高級(jí)功能,如自定義鏈、使用GPU加速計(jì)算等。2張量創(chuàng)建與初始化2.1使用numpy創(chuàng)建張量在Chainer中,我們經(jīng)常使用numpy庫(kù)來創(chuàng)建和初始化張量。numpy提供了多種創(chuàng)建張量的方法,這些張量可以作為Chainer變量的輸入。下面是一些常見的numpy張量創(chuàng)建方法:importnumpyasnp

#創(chuàng)建一個(gè)全零的張量

zero_tensor=np.zeros((2,3))

print("全零張量:\n",zero_tensor)

#創(chuàng)建一個(gè)全一的張量

one_tensor=np.ones((2,3))

print("全一張量:\n",one_tensor)

#創(chuàng)建一個(gè)具有特定值的張量

specific_tensor=np.full((2,3),5)

print("特定值張量:\n",specific_tensor)

#創(chuàng)建一個(gè)隨機(jī)張量

random_tensor=np.random.rand(2,3)

print("隨機(jī)張量:\n",random_tensor)

#創(chuàng)建一個(gè)從正態(tài)分布中采樣的張量

normal_tensor=np.random.randn(2,3)

print("正態(tài)分布張量:\n",normal_tensor)2.1.1代碼解釋np.zeros(shape):創(chuàng)建一個(gè)給定形狀和類型的用0填充的數(shù)組。np.ones(shape):創(chuàng)建一個(gè)給定形狀和類型的用1填充的數(shù)組。np.full(shape,fill_value):創(chuàng)建一個(gè)給定形狀和類型的用fill_value填充的數(shù)組。np.random.rand(*shape):從[0,1)的均勻分布中隨機(jī)采樣一個(gè)給定形狀的數(shù)組。np.random.randn(*shape):從標(biāo)準(zhǔn)正態(tài)分布中隨機(jī)采樣一個(gè)給定形狀的數(shù)組。2.2使用Chainer函數(shù)創(chuàng)建張量Chainer本身也提供了創(chuàng)建張量的方法,這些方法通常與numpy或cupy(用于GPU計(jì)算)兼容。下面是一些使用Chainer創(chuàng)建張量的例子:importchainer

importnumpyasnp

#使用Chainer創(chuàng)建一個(gè)全零的張量

zero_tensor_chainer=chainer.Variable(np.zeros((2,3)))

print("Chainer全零張量:\n",zero_tensor_chainer.data)

#使用Chainer創(chuàng)建一個(gè)全一的張量

one_tensor_chainer=chainer.Variable(np.ones((2,3)))

print("Chainer全一張量:\n",one_tensor_chainer.data)

#使用Chainer創(chuàng)建一個(gè)隨機(jī)張量

random_tensor_chainer=chainer.Variable(np.random.rand(2,3))

print("Chainer隨機(jī)張量:\n",random_tensor_chainer.data)

#使用Chainer創(chuàng)建一個(gè)從正態(tài)分布中采樣的張量

normal_tensor_chainer=chainer.Variable(np.random.randn(2,3))

print("Chainer正態(tài)分布張量:\n",normal_tensor_chainer.data)2.2.1代碼解釋chainer.Variable(data):使用numpy或cupy數(shù)組創(chuàng)建一個(gè)Chainer變量。這個(gè)變量可以用于構(gòu)建計(jì)算圖,并且可以自動(dòng)計(jì)算梯度。2.2.2初始化張量在深度學(xué)習(xí)中,張量的初始化對(duì)于模型的訓(xùn)練至關(guān)重要。Chainer提供了多種初始化方法,例如chainer.initializers模塊,可以用來初始化權(quán)重張量。下面是一個(gè)使用chainer.initializers初始化權(quán)重張量的例子:importchainer

importchainer.initializersasI

importnumpyasnp

#初始化一個(gè)權(quán)重張量

init=I.HeNormal()#使用He初始化方法

weight_tensor=chainer.Variable(init((2,3)))

print("初始化后的權(quán)重張量:\n",weight_tensor.data)2.2.3代碼解釋I.HeNormal():使用He初始化方法創(chuàng)建一個(gè)初始化器。He初始化是針對(duì)ReLU激活函數(shù)設(shè)計(jì)的,可以避免梯度消失或爆炸問題。init(shape):使用初始化器初始化一個(gè)給定形狀的張量。通過上述方法,我們可以在Chainer中創(chuàng)建和初始化各種類型的張量,為構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型提供基礎(chǔ)。3張量的基本操作3.1張量的形狀與屬性在Chainer中,張量是進(jìn)行計(jì)算和數(shù)據(jù)處理的基本單元。張量的形狀(shape)和屬性(attributes)是理解其結(jié)構(gòu)和如何操作它的關(guān)鍵。3.1.1形狀(Shape)張量的形狀描述了其維度和大小。例如,一個(gè)2D張量可能表示為(3,4),這意味著它有3行和4列。形狀屬性可以幫助我們了解張量的結(jié)構(gòu),這對(duì)于執(zhí)行諸如矩陣乘法、轉(zhuǎn)置或重塑等操作至關(guān)重要。3.1.2屬性(Attributes)張量的屬性包括數(shù)據(jù)類型、是否需要梯度計(jì)算等。在Chainer中,張量通常以Variable或chainer.Variable的形式存在,這允許我們進(jìn)行自動(dòng)微分和反向傳播。示例代碼importchainer

importnumpyasnp

#創(chuàng)建一個(gè)張量

data=np.array([[1,2,3],[4,5,6]],dtype=np.float32)

x=chainer.Variable(data)

#打印張量的形狀

print("張量的形狀:",x.shape)

#打印張量的數(shù)據(jù)類型

print("張量的數(shù)據(jù)類型:",x.dtype)

#設(shè)置張量是否需要梯度計(jì)算

x.volatile='off'

print("張量是否需要梯度計(jì)算:",x.volatile)3.2張量的索引與切片索引和切片是訪問和操作張量中特定元素或子集的重要方法。在Chainer中,我們可以使用Python的索引和切片語法來操作張量。3.2.1索引(Indexing)索引允許我們?cè)L問張量中的單個(gè)元素。例如,x[0,1]將返回張量中第一行第二列的元素。3.2.2切片(Slicing)切片允許我們?cè)L問張量的子集。例如,x[0:2,1:3]將返回張量中前兩行的第二列和第三列的子矩陣。示例代碼#創(chuàng)建一個(gè)張量

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

x=chainer.Variable(data)

#索引操作

print("索引操作:",x[1,2])#輸出張量中第二行第三列的元素

#切片操作

print("切片操作:")

print(x[0:2,1:3])#輸出張量中前兩行的第二列和第三列的子矩陣3.2.3多維索引與切片對(duì)于多維張量,索引和切片可以更復(fù)雜。我們可以使用多個(gè)索引或切片來訪問特定的子張量。示例代碼#創(chuàng)建一個(gè)3D張量

data=np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]],dtype=np.float32)

x=chainer.Variable(data)

#多維索引操作

print("多維索引操作:",x[1,0,1])#輸出張量中第二層第一行第二列的元素

#多維切片操作

print("多維切片操作:")

print(x[0:2,:,0])#輸出張量中前兩層的所有行的第一列的子張量通過這些基本操作,我們可以有效地在Chainer中處理和操作張量,為更復(fù)雜的計(jì)算和模型構(gòu)建奠定基礎(chǔ)。4張量的數(shù)學(xué)運(yùn)算在深度學(xué)習(xí)框架中,張量是核心數(shù)據(jù)結(jié)構(gòu),用于表示多維數(shù)組。Chainer是一個(gè)靈活的深度學(xué)習(xí)框架,它提供了豐富的張量操作,使得數(shù)學(xué)運(yùn)算變得簡(jiǎn)單而高效。下面,我們將深入探討Chainer中張量的加法、乘法、點(diǎn)積與外積的實(shí)現(xiàn)和應(yīng)用。4.1張量加法張量加法是張量運(yùn)算中最基本的操作之一。在Chainer中,張量加法遵循NumPy的廣播規(guī)則,允許不同形狀的張量進(jìn)行加法運(yùn)算。4.1.1示例代碼importchainer

importnumpyasnp

#創(chuàng)建兩個(gè)張量

x=chainer.Variable(np.array([[1,2],[3,4]],dtype=np.float32))

y=chainer.Variable(np.array([1,2],dtype=np.float32))

#執(zhí)行張量加法

z=x+y

#輸出結(jié)果

print(z.data)4.1.2代碼解釋在上述代碼中,我們首先導(dǎo)入了chainer和numpy庫(kù)。然后,我們創(chuàng)建了兩個(gè)張量x和y,其中x是一個(gè)2x2的矩陣,而y是一個(gè)1x2的向量。當(dāng)我們執(zhí)行x+y時(shí),Chainer會(huì)自動(dòng)應(yīng)用廣播規(guī)則,將y的值加到x的每一行上,最終輸出的結(jié)果是一個(gè)2x2的矩陣,其中每一行都是x的對(duì)應(yīng)行加上y的值。4.2張量乘法張量乘法可以是元素級(jí)別的乘法,也可以是矩陣乘法。在Chainer中,這兩種乘法都可以通過不同的函數(shù)來實(shí)現(xiàn)。4.2.1示例代碼importchainer

importnumpyasnp

#創(chuàng)建兩個(gè)張量

x=chainer.Variable(np.array([[1,2],[3,4]],dtype=np.float32))

y=chainer.Variable(np.array([[1,1],[1,1]],dtype=np.float32))

#執(zhí)行元素級(jí)別的乘法

z_elementwise=x*y

#執(zhí)行矩陣乘法

z_matrix=chainer.functions.matmul(x,y)

#輸出結(jié)果

print("元素級(jí)別的乘法結(jié)果:")

print(z_elementwise.data)

print("矩陣乘法結(jié)果:")

print(z_matrix.data)4.2.2代碼解釋在本例中,我們創(chuàng)建了兩個(gè)2x2的張量x和y。元素級(jí)別的乘法通過x*y直接實(shí)現(xiàn),結(jié)果是兩個(gè)張量對(duì)應(yīng)元素的乘積。矩陣乘法則通過chainer.functions.matmul(x,y)實(shí)現(xiàn),它遵循矩陣乘法的規(guī)則,即x的行與y的列相乘并求和。4.3張量的點(diǎn)積與外積點(diǎn)積和外積是張量運(yùn)算中重要的數(shù)學(xué)概念。點(diǎn)積通常用于向量之間,而外積則可以用于向量或矩陣之間。4.3.1示例代碼importchainer

importnumpyasnp

#創(chuàng)建兩個(gè)向量

v1=chainer.Variable(np.array([1,2,3],dtype=np.float32))

v2=chainer.Variable(np.array([4,5,6],dtype=np.float32))

#計(jì)算點(diǎn)積

dot_product=chainer.functions.dot(v1,v2)

#創(chuàng)建兩個(gè)矩陣

m1=chainer.Variable(np.array([[1,2],[3,4]],dtype=np.float32))

m2=chainer.Variable(np.array([[1,1],[1,1]],dtype=np.float32))

#計(jì)算外積

outer_product=chainer.functions.outer(v1,v2)

matrix_outer_product=chainer.functions.outer(m1,m2)

#輸出結(jié)果

print("點(diǎn)積結(jié)果:")

print(dot_product.data)

print("向量的外積結(jié)果:")

print(outer_product.data)

print("矩陣的外積結(jié)果:")

print(matrix_outer_product.data)4.3.2代碼解釋點(diǎn)積通過chainer.functions.dot(v1,v2)計(jì)算,結(jié)果是兩個(gè)向量對(duì)應(yīng)元素的乘積之和。外積通過chainer.functions.outer(v1,v2)計(jì)算,結(jié)果是一個(gè)矩陣,其中的每個(gè)元素是v1的每個(gè)元素與v2的每個(gè)元素的乘積。對(duì)于矩陣的外積,Chainer同樣提供了outer函數(shù),但需要注意的是,矩陣的外積通常指的是兩個(gè)矩陣的Kronecker積,這在Chainer中可能需要通過其他方式實(shí)現(xiàn),因?yàn)閛uter函數(shù)主要針對(duì)向量。通過這些示例,我們可以看到Chainer如何簡(jiǎn)化張量的數(shù)學(xué)運(yùn)算,使得深度學(xué)習(xí)模型的構(gòu)建和訓(xùn)練變得更加直觀和高效。5張量的高級(jí)操作5.1張量的廣播5.1.1原理在Chainer中,張量的廣播是指在進(jìn)行算術(shù)運(yùn)算時(shí),Chainer能夠自動(dòng)調(diào)整張量的形狀,使得不同形狀的張量能夠進(jìn)行運(yùn)算。這一機(jī)制允許較小的張量與較大的張量進(jìn)行操作,Chainer會(huì)自動(dòng)復(fù)制較小的張量,直到其形狀與較大的張量匹配。5.1.2示例假設(shè)我們有一個(gè)形狀為(2,3)的張量A和一個(gè)形狀為(3,)的張量B,我們想要將B加到A的每一行上。在Chainer中,這可以通過廣播機(jī)制實(shí)現(xiàn)。importchainer

importnumpyasnp

#創(chuàng)建張量A

A=chainer.Variable(np.array([[1,2,3],[4,5,6]],dtype=np.float32))

#創(chuàng)建張量B

B=chainer.Variable(np.array([1,1,1],dtype=np.float32))

#使用廣播機(jī)制進(jìn)行加法

C=A+B

#輸出結(jié)果

print(C.data)5.1.3解釋在上述代碼中,B的形狀為(3,),而A的形狀為(2,3)。Chainer會(huì)自動(dòng)將B復(fù)制兩次,形成一個(gè)形狀為(2,3)的張量,然后與A進(jìn)行逐元素加法。5.2張量的轉(zhuǎn)置與重塑5.2.1原理張量的轉(zhuǎn)置是指改變張量的維度順序,而重塑則是改變張量的形狀,但保持其數(shù)據(jù)的完整性。在Chainer中,這兩個(gè)操作可以通過transpose和reshape方法實(shí)現(xiàn)。5.2.2示例假設(shè)我們有一個(gè)形狀為(2,3,4)的張量X,我們想要將其轉(zhuǎn)置為(3,2,4)的形狀,并進(jìn)一步重塑為(6,4)的形狀。importchainer

importnumpyasnp

#創(chuàng)建張量X

X=chainer.Variable(np.random.rand(2,3,4).astype(np.float32))

#轉(zhuǎn)置張量X

X_transposed=X.transpose(1,0,2)

#重塑轉(zhuǎn)置后的張量

X_reshaped=X_transposed.reshape(6,4)

#輸出結(jié)果

print("原始張量形狀:",X.data.shape)

print("轉(zhuǎn)置后張量形狀:",X_transposed.data.shape)

print("重塑后張量形狀:",X_reshaped.data.shape)5.2.3解釋在代碼中,X首先通過transpose方法轉(zhuǎn)置,改變了其維度順序。然后,通過reshape方法,我們改變了X_transposed的形狀,但保持了其數(shù)據(jù)的完整性。5.3張量的拼接與分割5.3.1原理張量的拼接是指將兩個(gè)或多個(gè)張量沿著一個(gè)特定的維度連接在一起,而分割則是將一個(gè)張量按照特定維度分成多個(gè)張量。在Chainer中,這些操作可以通過concat和split函數(shù)實(shí)現(xiàn)。5.3.2示例假設(shè)我們有兩個(gè)形狀為(2,3)的張量D和E,我們想要將它們沿著第一維度拼接,并將結(jié)果分割成兩個(gè)張量。importchainer

importnumpyasnp

#創(chuàng)建張量D和E

D=chainer.Variable(np.array([[1,2,3],[4,5,6]],dtype=np.float32))

E=chainer.Variable(np.array([[7,8,9],[10,11,12]],dtype=np.float32))

#沿著第一維度拼接張量D和E

F=chainer.functions.concat((D,E),axis=0)

#將拼接后的張量F分割成兩個(gè)張量

G,H=chainer.functions.split_axis(F,2,axis=0)

#輸出結(jié)果

print("拼接后張量形狀:",F.data.shape)

print("分割后張量G形狀:",G.data.shape)

print("分割后張量H形狀:",H.data.shape)5.3.3解釋在示例中,D和E通過concat函數(shù)沿著第一維度拼接,形成一個(gè)形狀為(4,3)的張量F。然后,F(xiàn)通過split_axis函數(shù)分割成兩個(gè)形狀為(2,3)的張量G和H。通過這些高級(jí)操作,Chainer提供了強(qiáng)大的張量處理能力,使得數(shù)據(jù)預(yù)處理和模型構(gòu)建變得更加靈活和高效。6張量與神經(jīng)網(wǎng)絡(luò)6.1張量在神經(jīng)網(wǎng)絡(luò)中的應(yīng)用張量是神經(jīng)網(wǎng)絡(luò)中不可或缺的數(shù)據(jù)結(jié)構(gòu),它在數(shù)學(xué)上可以被看作是向量和矩陣的推廣。在神經(jīng)網(wǎng)絡(luò)中,張量通常用于表示輸入數(shù)據(jù)、權(quán)重、偏置以及輸出結(jié)果。例如,一個(gè)圖像數(shù)據(jù)可以被表示為一個(gè)三維張量,其中第一維表示顏色通道(如紅、綠、藍(lán)),第二維和第三維分別表示圖像的寬度和高度。權(quán)重和偏置在神經(jīng)網(wǎng)絡(luò)中則通常表示為二維張量,用于連接神經(jīng)元之間的權(quán)重和每個(gè)神經(jīng)元的偏置。6.1.1示例:使用Chainer創(chuàng)建張量并構(gòu)建神經(jīng)網(wǎng)絡(luò)importnumpyasnp

importchainer

fromchainerimportVariable,FunctionSet,optimizers

importchainer.functionsasF

importchainer.linksasL

#創(chuàng)建一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)

classMLP(FunctionSet):

def__init__(self):

super(MLP,self).__init__(

l1=L.Linear(784,200),#第一層全連接層

l2=L.Linear(200,100),#第二層全連接層

l3=L.Linear(100,10)#輸出層

)

defforward(self,x_data,y_data,train=True):

x,t=Variable(x_data),Variable(y_data)

h1=F.relu(self.l1(x))

h2=F.relu(self.l2(h1))

y=self.l3(h2)

returnF.softmax_cross_entropy(y,t),F.accuracy(y,t)

#初始化神經(jīng)網(wǎng)絡(luò)

model=MLP()

#創(chuàng)建優(yōu)化器

optimizer=optimizers.Adam()

optimizer.setup(model)

#準(zhǔn)備數(shù)據(jù)

x_data=np.random.rand(100,784).astype(np.float32)#100個(gè)樣本,每個(gè)樣本784維

y_data=np.random.randint(0,10,size=(100,)).astype(32)#100個(gè)標(biāo)簽,每個(gè)標(biāo)簽是一個(gè)0到9的整數(shù)

#使用張量進(jìn)行前向傳播

loss,acc=model.forward(x_data,y_data)

print('loss:',loss.data)

print('accuracy:',acc.data)

#使用張量進(jìn)行反向傳播

loss.backward()

optimizer.update()在這個(gè)例子中,我們首先定義了一個(gè)簡(jiǎn)單的多層感知器(MLP)神經(jīng)網(wǎng)絡(luò),它包含三個(gè)全連接層。然后,我們使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論