日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MindSpore静态图语法支持

發布時間:2023/11/28 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MindSpore静态图语法支持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MindSpore靜態圖語法支持
概述
在Graph模式下,Python代碼并不是由Python解釋器去執行,而是將代碼編譯成靜態計算圖,然后執行靜態計算圖。
關于Graph模式和計算圖,可參考文檔:https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/debug_in_pynative_mode.html
當前僅支持編譯@ms_function裝飾器修飾的函數、Cell及其子類的實例。 對于函數,則編譯函數定義;對于網絡,則編譯construct方法及其調用的其他方法或者函數。
ms_function使用規則可參考文檔:https://www.mindspore.cn/doc/api_python/zh-CN/r1.1/mindspore/mindspore.html#mindspore.ms_function
Cell定義可參考文檔:https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.1/cell.html
由于語法解析的限制,當前在編譯構圖時,支持的數據類型、語法以及相關操作并沒有完全與Python語法保持一致,部分使用受限。
本文主要介紹,在編譯靜態圖時,支持的數據類型、語法以及相關操作,這些規則僅適用于Graph模式。
以下所有示例都運行在Graph模式下的網絡中,為了簡潔,并未將網絡的定義都寫出來。
數據類型
Python內置數據類型
當前支持的Python內置數據類型包括:Number、String、List、Tuple和Dictionary。
Number
支持int、float、bool,不支持complex(復數)。
支持在網絡里定義Number,即支持語法:y = 1、y = 1.2、 y = True。
不支持在網絡里強轉Number,即不支持語法:y = int(x)、y = float(x)、y = bool(x)。
String
支持在網絡里構造String,即支持語法y = “abcd”。
不支持在網絡里強轉String,即不支持語法 y = str(x)。
List
支持在網絡里構造List,即支持語法y = [1, 2, 3]。
不支持在網絡里強轉List,即不支持語法y = list(x)。
計算圖中最終需要輸出的List會轉換為Tuple輸出。
? 支持接口
append: 向list里追加元素。
示例如下:
x = [1, 2, 3]
x.append(4)
結果如下:
x: (1, 2, 3, 4)
? 支持索引取值和賦值
支持單層和多層索引取值以及賦值。
取值和賦值的索引值僅支持int。
賦值時,所賦的值支持Number、String、Tuple、List、Tensor。
示例如下:
x = [[1, 2], 2, 3, 4]

y = x[0][1]
x[1] = Tensor(np.array([1, 2, 3]))
x[2] = “ok”
x[3] = (1, 2, 3)
x[0][1] = 88
結果如下:
y: 2
x: ([1, 88], Tensor(shape=[3], dtype=Int64, value=[1, 2, 3]), ‘ok’, (1, 2, 3))
Tuple
支持在網絡里構造Tuple,即支持語法y = (1, 2, 3)。
不支持在網絡里強轉Tuple,即不支持語法y = tuple(x)。
? 支持索引取值
索引值支持int、slice、Tensor,也支持多層索引取值,即支持語法data = tuple_x[index0][index1]…。
索引值為Tensor有如下限制:
o tuple里存放的都是Cell,每個Cell要在tuple定義之前完成定義,每個Cell的入參個數、入參類型和入參shape要求一致,每個Cell的輸出個數、輸出類型和輸出shape也要求一致。
o 索引Tensor是一個dtype為int32的標量Tensor,取值范圍在[-tuple_len, tuple_len)。
o 該語法不支持if、while、for控制流條件為變量的運行分支,僅支持控制流條件為常量。
o 僅支持GPU后端。
int、slice索引示例如下:
x = (1, (2, 3, 4), 3, 4, Tensor(np.array([1, 2, 3])))
y = x[1][1]
z = x[4]
m = x[1:4]
結果如下:
y: 3
z: Tensor(shape=[3], dtype=Int64, value=[1, 2, 3])
m: (2, 3, 4), 3, 4)
Tensor索引示例如下:
class Net(nn.Cell):
def init(self):
super(Net, self).init()
self.relu = nn.ReLU()
self.softmax = nn.Softmax()
self.layers = (self.relu, self.softmax)

def construct(self, x, index):ret = self.layers[index](x)return ret

Dictionary
支持在網絡里構造Dictionary,即支持語法y = {“a”: 1, “b”: 2},當前僅支持String作為key值。
計算圖中最終需要輸出的Dictionary,會取出所有的value組成Tuple輸出。
? 支持接口
keys:取出dict里所有的key值,組成Tuple返回。
values:取出dict里所有的value值,組成Tuple返回。
示例如下:
x = {“a”: Tensor(np.array([1, 2, 3])), “b”: Tensor(np.array([4, 5, 6])), “c”: Tensor(np.array([7, 8, 9]))}
y = x.keys()
z = x.values()
結果如下:
y: (“a”, “b”, “c”)
z: (Tensor(shape=[3], dtype=Int64, value=[1, 2, 3]), Tensor(shape=[3], dtype=Int64, value=[4, 5, 6]), Tensor(shape=[3], dtype=Int64, value=[7, 8, 9]))
? 支持索引取值和賦值
取值和賦值的索引值都僅支持String。賦值時,所賦的值支持Number、Tuple、Tensor。
示例如下:
x = {“a”: Tensor(np.array([1, 2, 3])), “b”: Tensor(np.array([4, 5, 6])), “c”: Tensor(np.array([7, 8, 9]))}
y = x[“b”]
x[“a”] = (2, 3, 4)
結果如下:
y: Tensor(shape=[3], dtype=Int64, value=[4, 5, 6])
x: {“a”: (2, 3, 4), Tensor(shape=[3], dtype=Int64, value=[4, 5, 6]), Tensor(shape=[3], dtype=Int64, value=[7, 8, 9])}
MindSpore自定義數據類型
當前MindSpore自定義數據類型包括:Tensor、Primitive和Cell。
Tensor
當前不支持在網絡里構造Tensor,即不支持語法x = Tensor(args…)。
可以通過@constexpr裝飾器修飾函數,在函數里生成Tensor。
關于@constexpr的用法可參考:https://www.mindspore.cn/doc/api_python/zh-CN/r1.1/mindspore/ops/mindspore.ops.constexpr.html
對于網絡中需要用到的常量Tensor,可以作為網絡的屬性,在init的時候定義,即self.x = Tensor(args…),然后在construct里使用。
如下示例,通過@constexpr生成一個shape = (3, 4), dtype = int64的Tensor。
@constexpr
def generate_tensor():
return Tensor(np.ones((3, 4)))
下面將介紹下Tensor支持的屬性、接口、索引取值和索引賦值。
? 支持屬性:
shape:獲取Tensor的shape,返回一個Tuple。
dtype:獲取Tensor的數據類型,返回一個MindSpore定義的數據類型。
? 支持接口:
all:對Tensor通過all操作進行歸約,僅支持Bool類型的Tensor。
any:對Tensor通過any操作進行歸約,僅支持Bool類型的Tensor。
view:將Tensorreshape成輸入的shape。
expand_as:將Tensor按照廣播規則擴展成與另一個Tensor相同的shape。
示例如下:
x = Tensor(np.array([[True, False, True], [False, True, False]]))
x_shape = x.shape
x_dtype = x.dtype
x_all = x.all()
x_any = x.any()
x_view = x.view((1, 6))

y = Tensor(np.ones((2, 3), np.float32))
z = Tensor(np.ones((2, 2, 3)))
y_as_z = y.expand_as(z)
結果如下:
x_shape: (2, 3)
x_dtype: Bool
x_all: Tensor(shape=[], dtype=Bool, value=False)
x_any: Tensor(shape=[], dtype=Bool, value=True)
x_view: Tensor(shape=[1, 6], dtype=Bool, value=[[True, False, True, False, True, False]])

y_as_z: Tensor(shape=[2, 2, 3], dtype=Float32, value=[[[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]], [[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]]])
? 索引取值
索引值支持int、True、None、slice、Tensor、Tuple。
o int索引取值
支持單層和多層int索引取值,單層int索引取值:tensor_x[int_index],多層int索引取值:tensor_x[int_index0][int_index1]…。
int索引取值操作的是第0維,索引值小于第0維長度,在取出第0維對應位置數據后,會消除第0維。
例如,如果對一個shape為(3, 4, 5)的tensor進行單層int索引取值,取得結果的shape是(4, 5)。
多層索引取值可以理解為,后一層索引取值在前一層索引取值結果上再進行int索引取值。
示例如下:
tensor_x = Tensor(np.arange(2 * 3 * 2).reshape((2, 3, 2)))
data_single = tensor_x[0]
data_multi = tensor_x[0][1]
結果如下:
data_single: Tensor(shape=[3, 2], dtype=Int64, value=[[0, 1], [2, 3], [4, 5]])
data_multi: Tensor(shape=[2], dtype=Int64, value=[2, 3])
o True索引取值
支持單層和多層True索引取值,單層True索引取值:tensor_x[True],多層True索引取值:tensor_x[True][True]…。
True索引取值操作的是第0維,在取出所有數據后,會在axis=0軸上擴展一維,該維長度為1。
例如,對一個shape為(3, 4, 5)的tensor進行單層True索引取值,取得結果的shape是(1, 3, 4, 5)。
多層索引取值可以理解為,后一層索引取值在前一層索引取值結果上再進行True索引取值。
示例如下:
tensor_x = Tensor(np.arange(2 * 3 ).reshape((2, 3)))
data_single = tensor_x[True]
data_multi = tensor_x[True][True]
結果如下:
data_single: Tensor(shape=[1, 2, 3], dtype=Int64, value=[[[0, 1, 2], [3, 4, 5]]])
data_multi: Tensor(shape=[1, 1, 2, 3], dtype=Int64, value=[[[[0, 1, 2], [3, 4, 5]]]])
o None索引取值
None索引取值和True索引取值一致,可參考True索引取值,這里不再贅述。
o ellipsis索引取值
支持單層和多層ellipsis索引取值,單層ellipsis索引取值:tensor_x[…],多層ellipsis索引取值:tensor_x[…][…]…。
ellipsis索引取值操作的是所有維度,原樣不動取出所有數據。一般多作為Tuple索引的組成元素,Tuple索引將于下面介紹。
例如,對一個shape為(3, 4, 5)的tensor進行ellipsis索引取值,取得結果的shape依然是(3, 4, 5)。
示例如下:
tensor_x = Tensor(np.arange(2 * 3 ).reshape((2, 3)))
data_single = tensor_x[…]
data_multi = tensor_x[…][…]
結果如下:
data_single: Tensor(shape=[2, 3], dtype=Int64, value=[[0, 1, 2], [3, 4, 5]])
data_multi: Tensor(shape=[2, 3], dtype=Int64, value=[[0, 1, 2], [3, 4, 5]])
o slice索引取值
支持單層和多層slice索引取值,單層slice索引取值:tensor_x[slice_index],多層slice索引取值:tensor_x[slice_index0][slice_index1]…。
slice索引取值操作的是第0維,取出第0維所切到位置的元素,slice不會降維,即使切到長度為1,區別于int索引取值。
例如,tensor_x[0:1:1] != tensor_x[0],因為shape_former = (1,) + shape_latter。
多層索引取值可以理解為,后一層索引取值在前一層索引取值結果上再進行slice索引取值。
slice有start、stop和step組成。start默認值為0,stop默認值為該維長度,step默認值為1。
例如,tensor_x[:] == tensor_x[0:length:1]。
示例如下:
tensor_x = Tensor(np.arange(4 * 2 * 2).reshape((4, 2, 2)))
data_single = tensor_x[1:4:2]
data_multi = tensor_x[1:4:2][1:]
結果如下:
data_single: Tensor(shape=[2, 2, 2], dtype=Int64, value=[[[4, 5], [6, 7]], [[12, 13], [14, 15]]])
data_multi: Tensor(shape=[1, 2, 2], dtype=Int64, value=[[[12, 13], [14, 15]]])
o Tensor索引取值
支持單層和多層Tensor索引取值,單層Tensor索引取值:tensor_x[tensor_index],多層Tensor索引取值:tensor_x[tensor_index0][tensor_index1]…。
Tensor索引取值操作的是第0維,取出第0維對應位置的元素。
索引Tensor數據類型必須是int32,元素不能是負數,值小于第0維長度。
Tensor索引取值得到結果的data_shape = tensor_index.shape + tensor_x.shape[1:]。
例如,對一個shape為(6, 4, 5)的tensor通過shape為(2, 3)的tensor進行索引取值,取得結果的shape為(2, 3, 4, 5)。
多層索引取值可以理解為,后一層索引取值在前一層索引取值結果上再進行Tensor索引取值。
示例如下:
tensor_x = Tensor(np.arange(4 * 2 * 3).reshape((4, 2, 3)))
tensor_index0 = Tensor(np.array([[1, 2], [0, 3]]), mstype.int32)
tensor_index1 = Tensor(np.array([[0, 0]]), mstype.int32)
data_single = tensor_x[tensor_index0]
data_multi = tensor_x[tensor_index0][tensor_index1]
結果如下:
data_single: Tensor(shape=[2, 2, 2, 3], dtype=Int64, value=[[[[4, 5], [6, 7]], [[8, 9], [10, 11]]], [[[0, 1], [2, 3]], [[12, 13], [14, 15]]]])
data_multi: Tensor(shape=[1, 2, 2, 2, 3], dtype=Int64, value=[[[[[4, 5], [6, 7]], [[8, 9], [10, 11]]], [[[4, 5], [6, 7]], [[8, 9], [10, 11]]]]])
o Tuple索引取值
索引Tuple的數據類型必須是int32,支持單層和多層Tuple索引取值,單層Tuple索引取值:tensor_x[tuple_index],多層Tuple索引取值:tensor_x[tuple_index0][tuple_index1]…。
Tuple索引里的元素可以包含int、slice、ellipsis、Tensor。
索引里除ellipsis外每個元素操作對應位置維度,即Tuple中第0個元素操作第0維,第1個元素操作第1維,以此類推,每個元素的索引規則與該元素類型索引取值規則一致。
Tuple索引里最多只有一個ellipsis,ellipsis前半部分索引元素從前往后對應Tensor第0維往后,后半部分索引元素從后往前對應Tensor最后一維往前,其他未指定的維度,代表全取。
元素里包含的Tensor數據類型必須是int32,且Tensor元素不能是負數,值小于操作維度長度。
例如,tensor_x[0:3, 1, tensor_index] == tensor_x[(0:3, 1, tensor_index)],因為0:3, 1, tensor_index就是一個Tuple。
多層索引取值可以理解為,后一層索引取值在前一層索引取值結果上再進行Tuple索引取值。
示例如下:
tensor_x = Tensor(np.arange(2 * 3 * 4).reshape((2, 3, 4)))
tensor_index = Tensor(np.array([[1, 2, 1], [0, 3, 2]]), mstype.int32)
data = tensor_x[1, 0:1, tensor_index]
結果如下:
data: Tensor(shape=[2, 3, 1], dtype=Int64, value=[[[13], [14], [13]], [[12], [15], [14]]])
? 索引賦值
索引值支持int、ellipsis、slice、Tensor、Tuple。
索引賦值可以理解為對索引到的位置元素按照一定規則進行賦值,所有索引賦值都不會改變原Tensor的shape。
同時支持增強索引賦值,即支持+=、-=、*=、/=、%=、**=、//=。
o int索引賦值
支持單層和多層int索引賦值,單層int索引賦值:tensor_x[int_index] = u,多層int索引賦值:tensor_x[int_index0][int_index1]… = u。
所賦值支持Number和Tensor,Number和Tensor都會被轉為與被更新Tensor數據類型一致。
當所賦值為Number時,可以理解為將int索引取到位置元素都更新為Number。
當所賦值為Tensor時,Tensor的shape必須等于或者可廣播為int索引取到結果的shape,在保持二者shape一致后,然后將賦值Tensor元素更新到索引取出結果對應元素的原Tensor位置。
例如,對shape = (2, 3, 4)的Tensor,通過int索引1賦值為100,更新后的Tensorshape仍為(2, 3, 4),但第0維位置為1的所有元素,值都更新為100。
示例如下:
tensor_x = Tensor(np.arange(2 * 3).reshape((2, 3)).astype(np.float32))
tensor_y = Tensor(np.arange(2 * 3).reshape((2, 3)).astype(np.float32))
tensor_z = Tensor(np.arange(2 * 3).reshape((2, 3)).astype(np.float32))
tensor_x[1] = 88.0
tensor_y[1][1] = 88.0
tensor_z[1]= Tensor(np.array([66, 88, 99]).astype(np.float32))
結果如下:
tensor_x: Tensor(shape=[2, 3], dtype=Float32, value=[[0.0, 1.0, 2.0], [88.0, 88.0, 88.0]])
tensor_y: Tensor(shape=[2, 3], dtype=Float32, value=[[0.0, 1.0, 2.0], [3.0, 88.0, 5.0]])
tensor_z: Tensor(shape=[2, 3], dtype=Float32, value=[[0.0, 1.0, 2.0], [66.0, 88.0, 99.0]])
o ellipsis索引賦值
支持單層和多層ellipsis索引賦值,單層ellipsis索引賦值:tensor_x[…] = u,多層ellipsis索引賦值:tensor_x[…][…]… = u。
所賦值支持Number和Tensor,Number和Tensor里的值都會轉為與被更新Tensor數據類型一致。
當所賦值為Number時,可以理解為將所有元素都更新為Number。
當所賦值為Tensor時,Tensor里元素個數必須為1或者等于原Tensor里元素個數,元素為1時進行廣播,個數相等shape不一致時進行reshape, 在保證二者shape一致后,將賦值Tensor元素按照位置逐一更新到原Tensor里。
例如,對shape = (2, 3, 4)的Tensor,通過…索引賦值為100,更新后的Tensorshape仍為(2, 3, 4),所有元素都變為100。
示例如下:
tensor_x = Tensor(np.arange(2 * 3).reshape((2, 3)).astype(np.float32))
tensor_y = Tensor(np.arange(2 * 3).reshape((2, 3)).astype(np.float32))
tensor_z = Tensor(np.arange(2 * 3).reshape((2, 3)).astype(np.float32))
tensor_x[…] = 88.0
tensor_y[…] = Tensor(np.array([22, 44, 55, 22, 44, 55]).astype(np.float32))
結果如下:
tensor_x: Tensor(shape=[2, 3], dtype=Float32, value=[[88.0, 88.0, 88.0], [88.0, 88.0, 88.0]])
tensor_y: Tensor(shape=[2, 3], dtype=Float32, value=[[22.0, 44.0, 55.0], [22.0, 44.0, 55.0]])
o slice索引賦值
支持單層和多層slice索引賦值,單層slice索引賦值:tensor_x[slice_index] = u,多層slice索引賦值:tensor_x[slice_index0][slice_index1]… = u。
所賦值支持Number和Tensor,Number和Tensor里的值都會轉為與被更新Tensor數據類型一致。
當所賦值為Number時,可以理解為將slice索引取到位置元素都更新為Number。
當所賦值為Tensor時,Tensor里元素個數必須為1或者等于slice索引取到Tensor里元素個數,元素為1時進行廣播,個數相等shape不一致時進行reshape, 在保證二者shape一致后,將賦值Tensor元素按照位置逐一更新到原Tensor里。
例如,對shape = (2, 3, 4)的Tensor,通過0:1:1索引賦值為100,更新后的Tensorshape仍為(2, 3, 4),但第0維位置為0的所有元素,值都更新為100。
示例如下:
tensor_x = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_y = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_z = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_x[0:1] = 88.0
tensor_y[0:2][0:2] = 88.0
tensor_z[0:2] = Tensor(np.array([11, 12, 13, 11, 12, 13]).astype(np.float32))
結果如下:
tensor_x: Tensor(shape=[3, 3], dtype=Float32, value=[[88.0, 88.0, 88.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
tensor_y: Tensor(shape=[3, 3], dtype=Float32, value=[[88.0, 88.0, 88.0], [88.0, 88.0, 88.0], [6.0, 7.0, 8.0]])
tensor_z: Tensor(shape=[3, 3], dtype=Float32, value=[[11.0, 12.0, 13.0], [11.0, 12.0, 13.0], [6.0, 7.0, 8.0]])
o Tensor索引賦值
僅支持單層Tensor索引賦值,即tensor_x[tensor_index] = u。
索引Tensor支持int32和bool類型。
所賦值支持Number、Tuple和Tensor,Number、Tuple和Tensor里的值必須與原Tensor數據類型一致。
當所賦值為Number時,可以理解為將Tensor索引取到位置元素都更新為Number。
當所賦值為Tensor時,Tensor的shape必須等于或者可廣播為索引取到結果的shape,在保持二者shape一致后,然后將賦值Tensor元素更新到索引取出結果對應元素的原Tensor位置。
當所賦值為Tuple時,Tuple里元素只能全是Number或者全是Tensor。
當全是Number時,Number的類型必須與原Tensor數據類型是一類,且元素的個數必須等于索引取到結果shape的最后一維,然后廣播為索引取到結果shape;
當全是Tensor的時候,這些Tensor在axis=0軸上打包之后成為一個新的賦值Tensor,這時按照所賦值為Tensor的規則進行賦值。
例如,對一個shape為(6, 4, 5)、dtype為float32的tensor通過shape為(2, 3)的tensor進行索引賦值,如果所賦值為Number,則Number必須是float; 如果所賦值為Tuple,則tuple里的元素都得是float,且個數為5;如果所賦值為Tensor,則Tensor的dtype必須為float32,且shape可廣播為(2, 3, 4, 5)。
示例如下:
tensor_x = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_y = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_index = Tensor(np.array([[2, 0, 2], [0, 2, 0], [0, 2, 0]], np.int32))
tensor_x[tensor_index] = 88.0
tensor_y[tensor_index] = Tensor(np.array([11.0, 12.0, 13.0]).astype(np.float32))
結果如下:
tensor_x: Tensor(shape=[3, 3], dtype=Float32, value=[[88.0, 88.0, 88.0], [3.0, 4.0, 5.0], [88.0, 88.0, 88.0]])
tensor_y: Tensor(shape=[3, 3], dtype=Float32, value=[[11.0, 12.0, 13.0], [3.0, 4.0, 5.0], [11.0, 12.0, 13.0]])
o Tuple索引賦值
支持單層和多層Tuple索引賦值,單層Tuple索引賦值:tensor_x[tuple_index] = u,多層Tuple索引賦值:tensor_x[tuple_index0][tuple_index1]… = u。
Tuple索引賦值和Tuple索引取值對索引的支持一致, 但多層Tuple索引賦值不支持Tuple里包含Tensor。
所賦值支持Number、Tuple和Tensor,Number、Tuple和Tensor里的值必須與原Tensor數據類型一致。
當所賦值為Number時,可以理解為將Tensor索引取到位置元素都更新為Number。
當所賦值為Tensor時,Tensor的shape必須等于或者可廣播為索引取到結果的shape,在保持二者shape一致后,然后將賦值Tensor元素更新到索引取出結果對應元素的原Tensor位置。
當所賦值為Tuple時,Tuple里元素只能全是Number或者全是Tensor。
當全是Number時,Number的類型必須與原Tensor數據類型是一類,且元素的個數必須等于索引取到結果shape的最后一維,然后廣播為索引取到結果shape;
當全是Tensor的時候,這些Tensor在axis=0軸上打包之后成為一個新的賦值Tensor,這時按照所賦值為Tensor的規則進行賦值。
示例如下:
tensor_x = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_y = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_z = Tensor(np.arange(3 * 3).reshape((3, 3)).astype(np.float32))
tensor_index = Tensor(np.array([[0, 1], [1, 0]]).astype(np.int32))
tensor_x[1, 1:3] = 88.0
tensor_y[1:3, tensor_index] = 88.0
tensor_z[1:3, tensor_index] = Tensor(np.array([11, 12]).astype(np.float32))
結果如下:
tensor_x: Tensor(shape=[3, 3], dtype=Float32, value=[[0.0, 1.0, 2.0], [3.0, 88.0, 88.0], [6.0, 7.0, 8.0]])
tensor_y: Tensor(shape=[3, 3], dtype=Float32, value=[[0.0, 1.0, 2.0], [88.0, 88.0, 5.0], [88.0, 88.0, 8.0]])
tensor_z: Tensor(shape=[3, 3], dtype=Float32, value=[[0.0, 1.0, 2.0], [12.0, 11.0, 5.0], [12.0, 11.0, 8.0]])
Primitive
當前支持在網絡里構造Primitive及其子類的實例,即支持語法reduce_sum = ReduceSum(True)。
但在構造時,參數只能通過位置參數方式傳入,不支持通過鍵值對方式傳入,即不支持語法reduce_sum = ReduceSum(keep_dims=True)。
當前不支持在網絡調用Primitive及其子類相關屬性和接口。
Primitive定義可參考文檔:https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.1/operators.html
當前已定義的Primitive可參考文檔:https://www.mindspore.cn/doc/api_python/zh-CN/r1.1/mindspore/mindspore.ops.html
Cell
當前支持在網絡里構造Cell及其子類的實例,即支持語法cell = Cell(args…)。
但在構造時,參數只能通過位置參數方式傳入,不支持通過鍵值對方式傳入,即不支持在語法cell = Cell(arg_name=value)。
當前不支持在網絡調用Cell及其子類相關屬性和接口,除非是在Cell自己的contrcut中通過self調用。
Cell定義可參考文檔:https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.1/cell.html
當前已定義的Cell可參考文檔:https://www.mindspore.cn/doc/api_python/zh-CN/r1.1/mindspore/mindspore.nn.html
運算符
算術運算符和賦值運算符支持Number和Tensor運算,也支持不同dtype的Tensor運算。
之所以支持,是因為這些運算符會轉換成同名算子進行運算,這些算子支持了隱式類型轉換。
規則可參考文檔:https://www.mindspore.cn/doc/note/zh-CN/r1.1/operator_list_implicit.html
算術運算符

賦值運算符

邏輯運算符

成員運算符

身份運算符

表達式
條件控制語句
if
使用方式:
? if (cond): statements…
? x = y if (cond) else z
參數:cond – 支持類型Number、Tuple、List、String、None、Tensor、Function,也可以是計算結果類型是其中之一的表達式。
限制:
? 在構圖時,如果if未能消除,則if分支return的數據類型和shape,與if分支外return的數據類型和shape必須一致。
? 當只有if時,if分支變量更新后數據類型和shape,與更新前數據類型和shape必須一致。
? 當即有if又有else時,if分支變量更新后數據類型和shape,與else分支更新后數據類型和shape必須一致。
示例1:
if x > y:
return m
else:
return n
if分支返回的m和else分支返回的n,二者數據類型和shape必須一致。
示例2:
if x > y:
out = m
else:
out = n
return out
if分支更新后out和else分支更新后out,二者數據類型和shape必須一致。
循環語句
for
使用方式:for i in sequence
示例如下:
z = Tensor(np.ones((2, 3)))
x = (1, 2, 3)
for i in x:
z += i
return z
結果如下:
z: Tensor(shape=[2, 3], dtype=Int64, value=[[7, 7], [7, 7], [7, 7]])
參數:sequence – 遍歷序列(Tuple、List)
while
使用方式:while(cond)
參數:cond – 與if一致。
限制:
? 在構圖時,如果while未能消除,則while內return的數據類型和shape,與while外return的數據類型和shape必須一致。
? while內變量更新后數據類型和shape,與更新前數據類型和shape必須一致。
示例1:
while x > y:
x += 1
return m
return n
while內返回的m和while外返回的n數據類型必須和shape一致。
示例2:
out = m
while x > y:
x += 1
out = n
return out
while內,out更新后和更新前的數據類型和shape必須一致。
流程控制語句
當前流程控制語句支持了break、continue和pass。
break
可用于for和while代碼塊里,用于終止整個循環。
示例如下:
for i in x:
if i == 2:
break
statement_a
statement_b
當 i == 2時,循環終止,執行statement_b。
continue
可用于for和while語句塊里,用于終止本輪循環,直接進入下一輪循環。
示例如下:
for i in x:
if i == 2:
continue
statement_a
statement_b
當 i == 2時,本輪循環終止,不會往下執行statement_a,進入下一輪循環。
pass
不做任何事情,占位語句。
函數定義語句
def關鍵字
用于定義函數。
使用方式:
def function_name(args): statements…
示例如下:
def number_add(x, y):
return x + y
ret = number_add(1, 2)
結果如下:
ret: 3
lambda表達式
用于生成函數。
使用方式:lambda x, y: x + y
示例如下:
number_add = lambda x, y: x + y
ret = number_add(2, 3)
結果如下:
ret: 5
函數
Python內置函數
當前支持的Python內置函數包括:len、isinstance、partial、map、range、enumerate、super和pow。
len
功能:求序列的長度。
調用:len(sequence)
入參:sequence – Tuple、List、Dictionary或者Tensor。
返回值:序列的長度,類型為int。當入參是Tensor時,返回的是Tensor第0維的長度。
示例如下:
x = (2, 3, 4)
y = [2, 3, 4]
d = {“a”: 2, “b”: 3}
z = Tensor(np.ones((6, 4, 5)))
x_len = len(x)
y_len = len(y)
d_len = len(d)
z_len = len(z)
結果如下:
x_len: 3
y_len: 3
d_len: 2
z_len: 6
isinstance
功能:判斷對象是否為類的實例。
調用:isinstance(obj, type)
入參:
? obj – 任意支持類型的任意一個實例。
? type – MindSpore dtype模塊下的一個類型。
返回值:obj為type的實例,返回True,否則返回False。
示例如下:
x = (2, 3, 4)
y = [2, 3, 4]
z = Tensor(np.ones((6, 4, 5)))
x_is_tuple = isinstance(x, mstype.tuple_)
y_is_list= isinstance(y, mstype.list_)
z_is_tensor = isinstance(z, mstype.tensor)
結果如下:
x_is_tuple: True
y_is_list: True
z_is_tensor: True
partial
功能:偏函數,固定函數入參。
調用:partial(func, arg, …)
入參:
? func – 函數。
? arg – 一個或多個要固定的參數,支持位置參數和鍵值對傳參。
返回值:返回某些入參固定了值的函數。
示例如下:
def add(x, y):
return x + y

add_ = partial(add, x=2)
m = add_(y=3)
n = add_(y=5)
結果如下:
m: 5
n: 7
map
功能:根據提供的函數對一個或者多個序列做映射,由映射的結果生成一個新的序列。 如果多個序列中的元素個數不一致,則生成的新序列與最短的那個長度相同。
調用:map(func, sequence, …)
入參:
? func – 函數。
? sequence – 一個或多個序列(Tuple或者List)。
返回值:返回一個Tuple。
示例如下:
def add(x, y):
return x + y

elements_a = (1, 2, 3)
elements_b = (4, 5, 6)
ret = map(add, elements_a, elements_b)
結果如下:
ret: (5, 7, 9)
zip
功能:將多個序列中對應位置的元素打包成一個個元組,然后由這些元組組成一個新序列, 如果各個序列中的元素個數不一致,則生成的新序列與最短的那個長度相同。
調用:zip(sequence, …)
入參:sequence – 一個或多個序列(Tuple或List)`。
返回值:返回一個Tuple。
示例如下:
elements_a = (1, 2, 3)
elements_b = (4, 5, 6)
ret = zip(elements_a, elements_b)
結果如下:
ret: ((1, 4), (2, 5), (3, 6))
range
功能:根據起始值、結束值和步長創建一個Tuple。
調用:
? range(start, stop, step)
? range(start, stop)
? range(stop)
入參:
? start – 計數起始值,類型為int,默認為0。
? stop – 計數結束值,但不包括在內,類型為int。
? step – 步長,類型為int,默認為1。
返回值:返回一個Tuple。
示例如下:
x = range(0, 6, 2)
y = range(0, 5)
z = range(3)
結果如下:
x: (0, 2, 4)
y: (0, 1, 2, 3, 4)
z: (0, 1, 2)
enumerate
功能:生成一個序列的索引序列,索引序列包含數據和對應下標。
調用:
? enumerate(sequence, start)
? enumerate(sequence)
入參:
? sequence – 一個序列(Tuple、List、Tensor)。
? start – 下標起始位置,類型為int,默認為0。
返回值:返回一個Tuple。
示例如下:
x = (100, 200, 300, 400)
y = Tensor(np.array([[1, 2], [3, 4], [5 ,6]]))
m = enumerate(x, 3)
n = enumerate(y)
結果如下:
m: ((3, 100), (4, 200), (5, 300), (5, 400))
n: ((0, Tensor(shape=[2], dtype=Int64, value=[1, 2])), (1, Tensor(shape=[2], dtype=Int64, value=[3, 4])), (2, Tensor(shape=[2], dtype=Int64, value=[5, 6])))
super
功能:用于調用父類(超類)的一個方法,一般在super之后調用父類的方法。
調用:
? super().xxx()
? super(type, self).xxx()
入參:
? type – 類。
? self – 對象。
返回值:返回父類的方法。
示例如下:
class FatherNet(nn.Cell):
def init(self, x):
super(FatherNet, self).init(x)
self.x = x

def construct(self, x, y):
return self.x * x

def test_father(self, x):
return self.x + x

class SingleSubNet(FatherNet):
def init(self, x, z):
super(SingleSubNet, self).init(x)
self.z = z

def construct(self, x, y):
ret_father_construct = super().construct(x, y)
ret_father_test = super(SingleSubNet, self).test_father(x)
return ret_father_construct, ret_father_test
pow
功能:求冪。
調用:pow(x, y)
入參:
? x – 底數, Number或Tensor。
? y – 冪指數, Number或Tensor。
返回值:返回x的y次冪,Number或Tensor。
示例如下:
x = Tensor(np.array([1, 2, 3]))
y = Tensor(np.array([1, 2, 3]))
ret = pow(x, y)
結果如下:
ret: Tensor(shape=[3], dtype=Int64, value=[1, 4, 27]))
print
功能:用于打印。
調用:print(arg, …)
入參:arg – 要打印的信息(String或Tensor)。
返回值:無返回值。
示例如下:
x = Tensor(np.array([1, 2, 3]))
print(“result”, x)
結果如下:
result Tensor(shape=[3], dtype=Int64, value=[1, 2, 3]))
函數參數
? 參數默認值:目前不支持默認值設為Tensor類型數據,支持int、float、bool、None、str、tuple、list、dict類型數據。
? 可變參數:支持帶可變參數網絡的推理和訓練。
? 鍵值對參數:目前不支持帶鍵值對參數的函數求反向。
? 可變鍵值對參數:目前不支持帶可變鍵值對的函數求反向。
網絡定義
整網實例類型
? 帶@ms_function裝飾器的普通Python函數。
? 繼承自nn.Cell的Cell子類。

網絡構造組件

網絡使用約束

  1. 當前整網入參(即最外層網絡入參)默認僅支持Tensor,如果要支持非Tensor,可設置網絡的support_non_tensor_inputs屬性為True。
    在網絡初始化的時候,設置self.support_non_tensor_inputs = True,該配置目前僅支持正向網絡,暫不支持反向網絡,即不支持對整網入參有非Tensor的網絡求反向。
    支持最外層傳入標量示例如下:
    class ExpandDimsNet(nn.Cell):
    def init(self):
    super(ExpandDimsNet, self).init()
    self.support_non_tensor_inputs = True
    self.expandDims = ops.ExpandDims()

    def construct(self, input_x, input_axis):
    return self.expandDims(input_x, input_axis)
    expand_dim_net = ExpandDimsNet()
    input_x = Tensor(np.random.randn(2,2,2,2).astype(np.float32))
    expand_dim_net(input_x, 0)

  2. 不允許修改網絡的非Parameter類型數據成員。
    示例如下:
    class Net(Cell):
    def init(self):
    super(Net, self).init()
    self.num = 2
    self.par = Parameter(Tensor(np.ones((2, 3, 4))), name=“par”)

    def construct(self, x, y):
    return x + y
    上面所定義的網絡里,self.num不是一個Parameter,不允許被修改,而self.par是一個Parameter,可以被修改。

  3. 當construct函數里,使用未定義的類成員時,不會像Python解釋器那樣拋出AttributeError,而是作為None處理。
    示例如下:
    class Net(Cell):
    def init(self):
    super(Net, self).init()

    def construct(self, x):
    return x + self.y
    上面所定義的網絡里,construct里使用了并未定義的類成員self.y,此時會將self.y作為None處理。

總結

以上是生活随笔為你收集整理的MindSpore静态图语法支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产黄色av | 日韩精品中文字幕在线播放 | 国产日本在线 | 久久永久免费 | 国产免费久久精品 | 黄色在线视频网址 | 亚洲播播| 国产日韩av在线 | 日本最新高清不卡中文字幕 | 99久久精品国产毛片 | 精品国产成人在线影院 | 天天操天天操天天操天天操天天操天天操 | 久久综合久色欧美综合狠狠 | 国产视频精品久久 | 91尤物国产尤物福利在线播放 | 色在线观看网站 | 午夜天使| 欧美日本三级 | 日韩免费在线视频 | 五月婷婷综合激情网 | 在线观看免费av片 | 激情五月伊人 | 精品9999 | 国产黄色大片免费看 | 亚洲男人天堂2018 | 欧美日韩一区二区三区在线观看视频 | 国产裸体无遮挡 | 国产福利一区二区在线 | 久久高清免费观看 | 黄色中文字幕 | 中文字幕 国产 一区 | 亚洲一区精品二人人爽久久 | 五月亚洲综合 | 91日韩在线专区 | 在线中文字幕电影 | 久久久久久久久久免费 | 午夜精品av在线 | av在线电影网站 | 亚洲成人欧美 | 黄色在线网站噜噜噜 | 一区精品在线 | 黄色大片日本免费大片 | 婷婷精品国产欧美精品亚洲人人爽 | 亚洲精品动漫在线 | 久草视频在线资源 | 很黄很污的视频网站 | 日韩三级在线 | 这里只有精品视频在线 | av在线激情 | 99视频免费看 | 国产亚洲精品成人av久久ww | av免费在线观看网站 | 免费 在线 中文 日本 | 中文字幕区 | 天天视频色 | 狠狠操狠狠干2017 | 国产精品一区二区麻豆 | 日韩专区在线播放 | 国产精品成人品 | 日本色小说视频 | 中文字幕在线一区观看 | 香蕉影院在线观看 | 国产女人免费看a级丨片 | 日本成人免费在线观看 | 国产美女精品久久久 | 国产一区二区成人 | 亚洲成人黄色 | 亚洲在线免费视频 | 日韩视频一 | 一区二区三区在线免费观看视频 | 久久综合久久综合久久 | 中文字幕在线视频免费播放 | 91久久国产露脸精品国产闺蜜 | www.com.黄 | 国产玖玖视频 | 久艹视频在线免费观看 | 天天做天天爱天天综合网 | 99精品视频免费观看视频 | 天天曰天天射 | 99国产精品久久久久久久久久 | 亚洲成人动漫在线观看 | 久久福利| 青青久草在线 | 欧美a在线看 | 国产伦精品一区二区三区四区视频 | 久久国产精品一区二区三区四区 | 日韩成人高清在线 | 欧美在线观看视频免费 | 成人在线超碰 | 99在线免费视频 | 深爱激情五月网 | 亚洲高清免费在线 | 懂色av一区二区在线播放 | 久久精品免费播放 | 亚洲最大av在线播放 | 国产精品黄色影片导航在线观看 | 久久婷婷五月综合色丁香 | 99精品国产一区二区三区不卡 | 正在播放五月婷婷狠狠干 | 日日夜夜人人精品 | 欧美日本不卡高清 | 干干操操 | 欧美日韩在线免费观看视频 | 国产女人40精品一区毛片视频 | 亚洲精品在线观 | 天天搞天天 | 国产视频欧美视频 | 精品国产99 | 午夜视频免费 | 免费视频久久久久 | 国产手机视频 | 国产精品一区二区三区99 | 日韩欧美一区二区三区在线 | 超碰com| 日日夜夜天天人人 | 日韩r级电影在线观看 | 中文字幕欲求不满 | 99精品热视频 | 在线视频成人 | 久久久久激情视频 | 久久久久久亚洲精品 | 亚洲黑丝少妇 | 蜜臀久久99精品久久久无需会员 | 五月婷香蕉久色在线看 | 色网av| 日韩精品免费在线视频 | 日韩高清激情 | 久久久精品欧美一区二区免费 | 国产黄色精品 | 免费观看成人av | 99久热在线精品视频观看 | 久久人人爽人人爽人人片 | 日韩a免费 | 亚洲日b视频 | 成人网444ppp | 亚洲一二视频 | 国产精品一区二区无线 | 天堂在线一区二区 | 久草国产在线观看 | 天天插天天射 | 丁香激情视频 | 天天干人人 | 亚洲成人精品在线观看 | 欧美激情综合网 | 天天色天天骑天天射 | 国产原创在线观看 | 日日爱网址 | 久久国产成人午夜av影院宅 | 久久99精品久久久久久秒播蜜臀 | 四虎影视成人永久免费观看视频 | 亚洲一区二区观看 | 国产麻豆精品一区 | 高清在线观看av | a天堂一码二码专区 | 91香蕉视频色版 | 国产大片黄色 | 亚洲成a人片在线www | 亚洲三级在线免费观看 | 亚洲国内精品在线 | 美女视频网 | 欧美aⅴ在线观看 | www激情网 | 久久婷婷网 | 国产一区二区久久精品 | 欧美日韩国产精品一区 | 亚洲高清视频在线观看免费 | 国产一级淫片免费看 | 99国产免费网址 | 成人国产一区二区 | 视频在线观看入口黄最新永久免费国产 | 国内精品小视频 | 在线蜜桃视频 | 狠狠网亚洲精品 | 亚洲国产一区在线观看 | 国产精品一区在线观看 | 天堂va在线观看 | 中文字幕一区二区三区乱码在线 | 99 色| 国产字幕av | 日日夜夜亚洲 | 国产精品一区二区免费 | 免费视频 三区 | 91精品国自产在线偷拍蜜桃 | 久久69精品久久久久久久电影好 | 欧美看片 | 夜夜操天天干, | 久青草国产在线 | 久久精品视频3 | 毛片网在线观看 | 久草在线看片 | 91激情视频在线播放 | 国产美女免费视频 | 久久草av | 色婷婷久久| 日本少妇高清做爰视频 | 国内久久久久久 | 天天射天天操天天 | 欧美日韩不卡一区二区三区 | 麻豆一精品传二传媒短视频 | 99成人在线视频 | 国产精品一区二区三区电影 | 日本爽妇网 | 综合久久影院 | 国产破处在线播放 | 国产手机av| 国产黄色片在线免费观看 | 就操操久久 | 日韩在线观看免费 | 久久精品国产美女 | 久久综合久色欧美综合狠狠 | 在线观看日韩专区 | 波多野结衣在线观看一区 | 丝袜美腿在线 | 日本黄色免费电影网站 | 亚州人成在线播放 | 夜夜夜精品 | 91精品国产麻豆国产自产影视 | 在线观看视频一区二区三区 | 色窝资源 | 美女黄视频免费看 | 久久国产精品小视频 | 久久99精品国产一区二区三区 | 久产久精国产品 | 久久试看 | 日韩欧美专区 | 免费在线一区二区 | 中文字幕色在线 | 97在线观看免费观看 | 精品五月天 | 国产精品美女久久久久久久久久久 | 亚洲国产成人久久综合 | 免费精品国产va自在自线 | 99草视频在线观看 | 一区二区在线不卡 | 成人av中文字幕在线观看 | 色综合色综合色综合 | 毛片网在线观看 | 在线看不卡av | 中文字幕精品三区 | 色播六月天 | 成人黄色毛片视频 | 久久精品视频在线看 | 中文字幕色综合网 | www.69xx| 国产精品k频道 | 色丁香综合 | 久久久精品一区二区三区 | 国产拍在线 | 美女网站色免费 | 国产精品久久一区二区三区, | 四虎www. | 99精品久久久久 | 日韩久久精品一区二区三区下载 | 一区二区三区免费在线观看视频 | 精品在线观看一区二区 | 2019中文在线观看 | 国产精品99久久99久久久二8 | 亚洲黄色一级大片 | 成人国产精品久久久 | 免费黄色在线网址 | 伊人视频| 久草视频在线播放 | 在线观看mv的中文字幕网站 | 丁香六月天| 91精品国产91p65 | 日韩精品在线看 | 国产精品一区免费在线观看 | 婷婷丁香在线 | 黄色免费观看网址 | 久久国产精品影视 | 色婷婷精品大在线视频 | 在线观看不卡视频 | 五月天中文字幕mv在线 | 久久成人在线视频 | 久久理论电影 | 亚洲黄电影 | 精品久久久久国产免费第一页 | 国产一区二区三区高清播放 | 国产精品成人一区 | 天天看天天干 | 中文字幕资源网在线观看 | 黄色小说视频在线 | 粉嫩高清一区二区三区 | 九九热免费视频在线观看 | 亚州五月 | 亚洲国产日韩欧美 | 国产高潮久久 | 国产成人精品在线播放 | 夜色成人网 | 色综合中文字幕 | 麻豆91精品视频 | 美女视频a美女大全免费下载蜜臀 | 亚洲一一在线 | 精品久久国产 | 在线免费高清视频 | 日韩在线视频看看 | 国产免费人成xvideos视频 | 涩涩网站免费 | 国产一区二区久久精品 | av中文在线影视 | 91亚洲精品久久久蜜桃网站 | 国产高清av免费在线观看 | 91精品国产综合久久福利不卡 | 日韩欧美精品免费 | 国产精久久久久久久 | 精品一区二区电影 | 国产日韩视频在线播放 | 久久www免费人成看片高清 | 九九久久精品视频 | 超碰成人av| .国产精品成人自产拍在线观看6 | 97在线观看免费视频 | 国产偷在线 | 久久免费视频在线观看6 | 久久久久久久久久久久av | 国产精品24小时在线观看 | 久久观看| 亚洲欧美日韩精品一区二区 | 久久影院中文字幕 | 日韩av一卡二卡三卡 | 十八岁免进欧美 | 欧美精品一区二区蜜臀亚洲 | 中中文字幕av在线 | 外国av网 | 黄色午夜 | 国产精品对白一区二区三区 | av免费播放 | 国产精品私人影院 | 欧美一级性生活视频 | 正在播放日韩 | 国产视频精选在线 | 香蕉在线观看 | 91视频在线网址 | 九九热中文字幕 | 日韩成人免费观看 | 中文字幕在线影院 | 日韩久久在线 | 久久精品欧美日韩精品 | 久久久亚洲电影 | 日韩欧美国产成人 | 亚洲精品在线观看中文字幕 | 一区二区电影在线观看 | 美女性爽视频国产免费app | 国产成人精品一区二区在线 | 亚洲午夜精 | 激情六月婷婷久久 | 天堂av一区二区 | 午夜精品电影 | 日韩国产精品一区 | 中文字幕亚洲情99在线 | 中文字幕免费 | 欧美精品久久久久久久久久 | 黄色大片视频网站 | 中文字幕在线播放一区 | 色综合天天天天做夜夜夜夜做 | 青草视频在线免费 | 综合激情| 日韩毛片在线播放 | 精品久久久久久一区二区里番 | 91视频黄色 | 久久8| 天天干天天插 | 五月天婷婷狠狠 | 久久天天躁夜夜躁狠狠85麻豆 | 国产999精品久久久久久麻豆 | 国产精品一区二区三区四区在线观看 | 亚洲一区动漫 | av成人亚洲| 免费在线观看一区二区三区 | 久久97久久97精品免视看 | 国产69精品久久久久99尤 | 亚洲毛片久久 | 黄在线免费看 | 久久精彩免费视频 | 久久免费精品国产 | 深爱综合网 | 免费一区在线 | 成人久久久电影 | 91精品成人 | 成人午夜片av在线看 | 91麻豆精品国产91久久久久久 | 国产精品一区二区三区观看 | 美女视频黄免费网站 | 狠狠色丁香婷婷综合久小说久 | 久久黄色免费 | 成人国产精品一区二区 | 欧美福利网址 | 国产成人在线免费观看 | 久久久色 | 在线欧美中文字幕 | 999国内精品永久免费视频 | 国产成人精品a | 在线观看免费中文字幕 | 91福利影院在线观看 | 天天操狠狠操夜夜操 | 久久96国产精品久久99漫画 | 午夜国产福利在线 | 亚洲一区二区三区91 | 欧美一二三视频 | 白丝av在线 | 日本久草电影 | 丁香婷婷电影 | 欧美一区三区四区 | 伊人婷婷网 | 亚洲欧美日韩一二三区 | 国产精品一区二区三区观看 | 国产又黄又硬又爽 | 国产精品系列在线播放 | 精品视频免费播放 | 亚洲老妇xxxxxx| 狠狠躁天天躁综合网 | 成人动漫精品一区二区 | 深爱激情五月婷婷 | 香蕉视频久久久 | 精品国产99国产精品 | 亚洲成人av免费 | 黄污在线看 | 婷婷视频在线播放 | 三上悠亚一区二区在线观看 | 日韩精品中文字幕在线播放 | 日韩电影一区二区在线观看 | 爱av在线网 | 亚洲一区二区精品 | 免费一级片在线观看 | 精品视频在线免费 | 亚洲激情p| 国产精品一区二区av日韩在线 | 99re中文字幕| 人人插人人做 | 99精品一区二区 | 91资源在线观看 | 日韩在线视频线视频免费网站 | av丁香| 国产亚洲精品久久久久久移动网络 | 美女久久久久久久久久 | 午夜精品久久久久久久99无限制 | 国产精品女同一区二区三区久久夜 | 91精品专区 | 丁香六月婷婷综合 | 色综合久久88色综合天天免费 | 日韩黄色av网站 | 国产视频一区二区在线播放 | 日韩三级.com | 国产高清福利在线 | 91福利国产在线观看 | 国产精品久久一区二区无卡 | 久久影视精品 | 丁香婷婷自拍 | 日日干,天天干 | 久精品视频| 911久久香蕉国产线看观看 | 超碰97免费 | 99久久网站 | 久久久亚洲影院 | 久久免费的视频 | 久久国产精品精品国产色婷婷 | 中国一 片免费观看 | 日韩在线视频二区 | 天天爽夜夜爽人人爽曰av | 国产精品久免费的黄网站 | 久久黄色a级片 | 国产网红在线观看 | 亚洲精品456在线播放 | 欧美二区在线播放 | 人人超碰免费 | 少妇搡bbbb搡bbb搡忠贞 | 久久99免费观看 | 国产一级片网站 | 在线免费视频你懂的 | 日韩免费观看一区二区三区 | 狠狠色香婷婷久久亚洲精品 | 最新av电影网站 | 玖玖在线视频观看 | 开心激情久久 | 日韩xxx视频 | 国产精品久久久久久高潮 | 96国产在线 | 在线观看www. | 日韩小视频网站 | 人人爽人人片 | 欧美精品一区二区三区一线天视频 | 午夜av大片| 麻豆va一区二区三区久久浪 | 2019中文字幕第一页 | 嫩草伊人久久精品少妇av | av线上看| 亚洲精品网址在线观看 | 国产只有精品 | 97超碰资源总站 | 黄网站www | 97福利在线观看 | 国产亚洲91| 在线观看av片 | 99精品免费在线 | 99久久精品国产欧美主题曲 | 一区二区三区动漫 | 日本黄色免费观看 | 日本91在线| 免费看一及片 | 麻豆91精品91久久久 | 超碰97国产精品人人cao | 在线观看日本高清mv视频 | 国产精品片 | 国产一区在线不卡 | 在线观看一区二区精品 | 手机看片1042 | 免费av视屏 | 99精品视频一区二区 | 99爱爱| 丁香高清视频在线看看 | 超碰激情在线 | 天天干天天操天天干 | 欧美日韩aa | 欧美伦理电影一区二区 | 国产精品一区二区久久久 | 欧美日韩免费在线视频 | 色综合久久久久综合99 | 国产精品久久久久免费 | 91亚洲精品久久久久图片蜜桃 | 亚洲精品国产精品国 | 亚洲蜜桃av | 一区 二区 精品 | 正在播放一区二区 | 天天鲁一鲁摸一摸爽一爽 | 亚洲精品色视频 | 999久久a精品合区久久久 | 久久久久成 | 深爱五月激情网 | 欧美精品亚洲精品日韩精品 | 欧美久久久久久久久久久久久 | 狠狠干夜夜操 | 中文字幕视频在线播放 | 久久久精品免费看 | 国产免费又粗又猛又爽 | 天天在线操 | 99久久国产免费免费 | 午夜体验区 | 久久天天躁狠狠躁亚洲综合公司 | 国产在线一区观看 | 日韩亚洲在线视频 | av三区在线 | 日本在线观看一区 | 欧美视频网址 | 最新国产精品亚洲 | 一本一本久久a久久精品综合妖精 | 中文字幕丰满人伦在线 | 国产黄色在线看 | 毛片视频电影 | 国产免费又黄又爽 | 国产综合小视频 | 精品99视频 | 17videosex性欧美 | 激情综合网五月激情 | 97视频在线观看播放 | 在线免费高清视频 | 91精品在线免费 | 久草在线视频首页 | 亚洲视频综合 | 中文字幕在线影院 | 黄色福利网 | 在线免费高清一区二区三区 | 国产高清av免费在线观看 | 美女免费视频网站 | 一区二区三区免费在线 | 成人午夜电影免费在线观看 | 看av免费网站 | 成人影片免费 | 亚洲一级片 | 国产又粗又硬又长又爽的视频 | 91av播放| 亚洲欧洲一区二区在线观看 | 91麻豆福利| 91精品国产99久久久久 | 精品国产综合区久久久久久 | 91精品在线播放 | 欧美最猛性xxxxx(亚洲精品) | 中文字幕亚洲精品日韩 | 亚洲综合色婷婷 | 日韩av资源在线观看 | 97精品国产一二三产区 | 午夜性生活 | 波多野结衣在线视频一区 | 亚洲最大av网 | 中文字幕视频免费观看 | 久久免费看毛片 | 黄色激情网址 | 欧美男男激情videos | 人人盈棋牌 | 日韩精品一区二区不卡 | 国产成人精品网站 | 日韩视频一区二区 | 亚洲开心激情 | 麻花豆传媒mv在线观看 | 久久成人在线 | 成人精品在线 | 久久久久久久久免费视频 | 人人干狠狠操 | 国产精品入口久久 | 在线观看日韩中文字幕 | 在线导航福利 | 国产免费又爽又刺激在线观看 | a爱爱视频 | 久久综合久久久 | 综合激情网 | 麻豆影音先锋 | 激情xxxx| 91福利视频网站 | 高清精品在线 | 在线有码中文 | 天天干夜夜擦 | 免费av一级电影 | 五月天av在线 | 一级性生活片 | 欧美另类xxx | h文在线观看免费 | a一片一级 | 色综久久| 在线免费观看av网站 | 五月天久久久 | a级免费观看 | 就色干综合 | 久久99久久99免费视频 | 色综合天天综合网国产成人网 | 国产精品中文 | 国产夫妻自拍av | 黄色免费看片网站 | 99久久国产免费免费 | 久久手机精品视频 | 97电影网手机版 | 精品视频在线播放 | 久久精品中文 | 久久最新 | a v在线视频| 久久久国产精品成人免费 | 亚洲成色777777在线观看影院 | 97在线看| 国产一二三区在线观看 | 国产综合视频在线观看 | 色综合久久久久网 | 最近2019年日本中文免费字幕 | 国产一线天在线观看 | 99热日本 | 亚洲精品五月天 | 免费看精品久久片 | 国产精品18毛片一区二区 | 国产久草在线观看 | 丁香久久 | 99久国产 | 久久国际影院 | 国产91精品在线播放 | 欧美看片| 99精品视频在线观看视频 | 91av国产视频 | 国产成人一区二区三区免费看 | 欧美日韩中文国产一区发布 | 91黄视频在线 | 久久综合九色综合欧美就去吻 | 亚洲视频免费在线观看 | 中文字幕高清视频 | 久久精品99北条麻妃 | 色婷婷久久久 | 狠狠色丁香久久婷婷综合丁香 | 91精品在线麻豆 | 国产精品白丝av | 片黄色毛片黄色毛片 | 美女网站在线观看 | 国产精品www | 日韩av片无码一区二区不卡电影 | 久久免费视频6 | 在线视频欧美精品 | 国产青草视频在线观看 | 欧美国产日韩一区 | www.在线观看视频 | 又黄又爽又湿又无遮挡的在线视频 | 久久视频在线观看免费 | bbbbb女女女女女bbbbb国产 | 丁香网五月天 | www.狠狠插.com | 99视频国产精品 | 免费观看v片在线观看 | 一区二区三区在线观看免费视频 | 久久久久激情视频 | 日韩国产精品一区 | 在线之家免费在线观看电影 | 久草在线官网 | 97色在线视频| 最新av在线网址 | 91完整视频| japanesefreesex中国少妇 | 成人wwwxxx视频| 国产精品久久久免费 | 色资源中文字幕 | 丁香九月激情综合 | 日韩av网页 | 国产精品6 | 四虎在线观看 | 中文字幕一区二区在线播放 | 99热精品免费观看 | 久久久影院一区二区三区 | 91在线产啪 | 色噜噜在线观看 | 97超碰免费在线观看 | 97精品国产97久久久久久粉红 | 色综合天天在线 | 国产男男gay做爰 | 黄色影院在线免费观看 | 中文字幕日韩国产 | 国产美女网 | 成年人在线免费看视频 | 在线色吧 | 在线视频麻豆 | 91人人干| 日韩一级片观看 | 毛片黄色一级 | 五月开心激情 | 欧美一区二区视频97 | 一区二区三区中文字幕在线观看 | 亚洲精品久久久久久中文传媒 | 国产精品一区二区三区在线看 | av网站播放| 91视频国产高清 | 中文字幕在线免费97 | 91免费视频黄 | 日韩成人中文字幕 | 亚洲精品tv久久久久久久久久 | 国产日韩欧美精品在线观看 | 中文字幕黄色网 | 99久久激情 | 国产精品久久久久一区 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | www.成人久久 | 国产中文字幕视频在线观看 | 久久性生活片 | 超碰电影在线观看 | 成年美女黄网站色大片免费看 | av黄色亚洲| 精品国产一区二区三区久久久久久 | 国产一区二区三区免费视频 | 日韩精品中文字幕在线 | 成人va在线观看 | 国产精品美女在线 | 天天射色综合 | 人人插人人舔 | 日产乱码一二三区别在线 | 国产精品都在这里 | 天天爽天天爽 | 亚洲资源在线 | 岛国精品一区二区 | 日韩h在线观看 | 亚洲干| 欧洲av在线 | 国产精品久久一区二区三区, | 97视频在线观看网址 | 久久久久欧美精品 | 免费观看黄| 久久久精品国产一区二区 | 国产免费久久久久 | 中文字幕欲求不满 | 日韩理论影院 | 国产91欧美| 三级黄色网址 | 在线看片一区 | 欧美日韩aa| 91天堂影院 | 国产99在线免费 | 91精品婷婷国产综合久久蝌蚪 | 福利电影久久 | www狠狠操 | 国产精品一区二区三区四 | 天天摸天天舔 | 国产涩涩网站 | 国产精品国产精品 | 免费看黄的视频 | 亚洲欧洲精品在线 | 午夜色站| 黄色在线看网站 | 午夜精品电影 | 成人sm另类专区 | 欧美一级片在线 | 国产精品igao视频网入口 | 97热久久免费频精品99 | 国产麻豆精品久久一二三 | 天天色天天干天天色 | 国内精品一区二区 | 日韩免费一级a毛片在线播放一级 | 免费看91的网站 | 久久,天天综合 | 国产一级二级三级视频 | av高清在线 | 91大神在线观看视频 | 91在线一区| 99精品区| 在线观看视频国产一区 | 久久免费av | 亚洲国内精品在线 | 日韩资源在线 | 91香蕉国产在线观看软件 | 亚洲第一成网站 | 亚洲欧美乱综合图片区小说区 | 日本69hd| 国产精品久久久久久一区二区三区 | 9幺看片 | 超碰999| 久久久久久综合 | 91久久国产自产拍夜夜嗨 | 欧美激情片在线观看 | 欧美一区二区三区在线视频观看 | 日韩精品中文字幕在线不卡尤物 | 欧美性色网站 | 91精品国产91久久久久久三级 | av在线播放一区二区三区 | 四虎成人在线 | 日韩精品一区在线播放 | 久久精品2| 久久无码av一区二区三区电影网 | 五月天天色 | 激情综合网五月 | 黄色成人毛片 | av在线在线| 亚洲国产成人av网 | 永久免费的啪啪网站免费观看浪潮 | 天天干,天天操,天天射 | 狠狠色丁香久久婷婷综合丁香 | 中文字幕精品久久 | 中文字幕在线播放一区二区 | 人人插人人做 | 成人啊 v | 国产在线色站 | 国产一线在线 | 特级免费毛片 | 贫乳av女优大全 | 久久丁香网 | 国产中文字幕久久 | 久久久免费精品视频 | 天天综合网天天综合色 | 国产免费av一区二区三区 | 日韩精品一区二区久久 | 久久这里只有精品1 | 成人91免费视频 | 少妇bbbb| 亚洲无吗天堂 | 久久网站最新地址 | 特黄免费av | 五月开心婷婷网 | 久操中文字幕在线观看 | 青春草免费视频 | 久久深夜 | 婷婷久久丁香 | 美腿丝袜一区二区三区 | 涩涩网站免费 | 午夜精品导航 | 国产一二区视频 | 日日摸日日添夜夜爽97 | 免费三级黄色 | 午夜精品久久久99热福利 | 99视频一区二区 | 91在线视频免费观看 | 午夜国产在线观看 | 国产精品第一页在线 | 91久久影院| 狠狠狠色丁香婷婷综合激情 | 国产高清综合 | 最新av电影网址 | 天天干天天综合 | 亚洲欧美日本国产 | 国产视频高清 | 天天操狠狠操网站 | 日韩大片在线看 | 国产毛片在线 | 在线视频欧美亚洲 | 国产精品毛片久久久久久 | 97视频在线观看网址 | 超碰97免费观看 | 中文字幕视频三区 | 九九热视频在线免费观看 | 在线免费黄色片 | 国产成人黄色av | 日韩精品一区二区在线观看视频 | 91精品成人久久 | 在线观看视频免费大全 | 亚洲国产中文在线观看 | 色综合久久五月天 | 日韩a级黄色片 | 天天激情天天干 | 国产精品免费久久久久 | 国产精品一区二区在线免费观看 | 96亚洲精品久久久蜜桃 | 看片一区二区三区 | 色综合国产 | 波多野结衣最新 | 日韩 在线a| 日本性视频 | 激情电影影院 | 精品一区欧美 | av成人在线看 | 国产视频一二三 | 成人午夜精品 | 91免费网站在线观看 | 97超碰免费 | 夜夜骑日日 | 国产一区二区在线免费播放 | 成人亚洲综合 | 亚洲精品视频二区 | 国产视频69 | 少妇视频在线播放 | 毛片二区| 81国产精品久久久久久久久久 | 日日夜夜免费精品视频 | 高清在线一区二区 | 久久精品视频在线观看免费 | 成人免费观看完整版电影 | 97av免费视频| 亚洲免费高清视频 | 久久精品小视频 | 成人午夜影院在线观看 | 在线日韩av | 最新午夜电影 | 五月天国产精品 | 99re6热在线精品视频 | 日韩久久久久久 | 久久国语露脸国产精品电影 | 狠狠躁日日躁狂躁夜夜躁 | 国产精品永久久久久久久www | 中文字幕色网站 | 91精品视频导航 | 国产一级二级三级在线观看 | 九九欧美视频 | 在线电影播放 | 97涩涩视频 | 欧美精品乱码久久久久久 | 欧美吞精| 狠狠色综合网站久久久久久久 | 国产高清av免费在线观看 | av一级久久 | 中文一区在线 | 伊人av综合| 成全在线视频免费观看 | 国产精品视频地址 | 久久精品美女视频 | 精品久久久久久电影 | 精品电影一区二区 | 久久精品视频免费播放 | 香蕉久久久久久av成人 | 免费高清在线观看成人 | 波多野结衣电影一区 | 国产在线视频导航 | 日韩视频在线观看视频 | 国产色综合 | 亚洲三级性片 | 五月婷婷激情综合网 | 亚洲在线黄色 | 91在线资源 | av成人动漫 | 日韩特级黄色片 | 中国精品少妇 | 有码中文字幕 | 天天综合91 | 98久久 | 97超级碰碰碰碰久久久久 | 成人va天堂 | 99精品国产福利在线观看免费 | 天天草天天操 | 97视频在线观看免费 | 91成人在线视频观看 | 国产香蕉在线 | 欧美精品v国产精品v日韩精品 | 久久99精品国产 | 久久综合久久综合久久综合 | 免费国产一区二区 | 免费观看版 | 国产五月色婷婷六月丁香视频 | www.久久成人| 国产欧美综合在线观看 | 天堂网中文在线 | 欧美日韩大片在线观看 | av综合站| 97在线观看视频 | 婷婷久久久 | 久久久久国产精品www | 天天草视频 | 国精产品一二三线999 | av资源在线观看 | 在线亚州 | 69xxxx欧美 | 精品国产一区二区三区噜噜噜 | 日韩理论电影在线观看 | 日韩com | 99精品国产免费久久久久久下载 | 精品1区二区| 五月天久久综合 | 婷婷亚洲激情 | 久久三级视频 | 天天操天天操 | 国产亚洲免费的视频看 | 国产一级视频在线观看 | 97热久久免费频精品99 | 在线观看午夜av | 国产在线a视频 |