From c8fb9c1f56b5f251ca9059d86fc0b05f83e9780e Mon Sep 17 00:00:00 2001 From: lvmingfu Date: Wed, 9 Mar 2022 09:31:22 +0800 Subject: [PATCH] fix cpu run error --- .../intermediate/text/sentimentnet.ipynb | 164 +++--------------- 1 file changed, 25 insertions(+), 139 deletions(-) diff --git a/tutorials/source_zh_cn/intermediate/text/sentimentnet.ipynb b/tutorials/source_zh_cn/intermediate/text/sentimentnet.ipynb index 54363e4363..8c33f2f743 100644 --- a/tutorials/source_zh_cn/intermediate/text/sentimentnet.ipynb +++ b/tutorials/source_zh_cn/intermediate/text/sentimentnet.ipynb @@ -7,7 +7,7 @@ "\n", "`GPU` `CPU` `进阶` `自然语言处理` `全流程`\n", "\n", - "[![在线运行](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_modelarts.png)](https://authoring-modelarts-cnnorth4.huaweicloud.com/console/lab?share-url-b64=aHR0cHM6Ly9taW5kc3BvcmUtd2Vic2l0ZS5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbS9ub3RlYm9vay9tYXN0ZXIvdHV0b3JpYWxzL3poX2NuL21pbmRzcG9yZV9zZW50aW1lbnRuZXQuaXB5bmI=&imageid=65f636a0-56cf-49df-b941-7d2a07ba8c8c) [![下载Notebook](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_notebook.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r1.6/tutorials/zh_cn/mindspore_sentimentnet.ipynb) [![下载样例代码](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_download_code.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r1.6/tutorials/zh_cn/mindspore_sentimentnet.py) [![查看源文件](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_source.png)](https://gitee.com/mindspore/docs/blob/r1.6/tutorials/source_zh_cn/intermediate/text/sentimentnet.ipynb)" + "[![在线运行](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_modelarts.png)](https://authoring-modelarts-cnnorth4.huaweicloud.com/console/lab?share-url-b64=aHR0cHM6Ly9taW5kc3BvcmUtd2Vic2l0ZS5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbS9ub3RlYm9vay9tb2RlbGFydHMvbWluZHNwb3JlX3NlbnRpbWVudG5ldC5pcHluYg==&imageid=65f636a0-56cf-49df-b941-7d2a07ba8c8c) [![下载Notebook](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_notebook.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r1.6/tutorials/zh_cn/mindspore_sentimentnet.ipynb) [![下载样例代码](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_download_code.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r1.6/tutorials/zh_cn/mindspore_sentimentnet.py) [![查看源文件](https://gitee.com/mindspore/docs/raw/r1.6/resource/_static/logo_source.png)](https://gitee.com/mindspore/docs/blob/r1.6/tutorials/source_zh_cn/intermediate/text/sentimentnet.ipynb)" ], "metadata": {} }, @@ -716,98 +716,21 @@ { "cell_type": "code", "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OrderedDict([('embedding.embedding_table', Parameter (name=embedding.embedding_table, shape=(252193, 300), dtype=Float32, requires_grad=False)), ('encoder.weight_ih_l0', Parameter (name=encoder.weight_ih_l0, shape=(400, 300), dtype=Float32, requires_grad=True)), ('encoder.weight_ih_l0_reverse', Parameter (name=encoder.weight_ih_l0_reverse, shape=(400, 300), dtype=Float32, requires_grad=True)), ('encoder.weight_ih_l1', Parameter (name=encoder.weight_ih_l1, shape=(400, 200), dtype=Float32, requires_grad=True)), ('encoder.weight_ih_l1_reverse', Parameter (name=encoder.weight_ih_l1_reverse, shape=(400, 200), dtype=Float32, requires_grad=True)), ('encoder.weight_hh_l0', Parameter (name=encoder.weight_hh_l0, shape=(400, 100), dtype=Float32, requires_grad=True)), ('encoder.weight_hh_l0_reverse', Parameter (name=encoder.weight_hh_l0_reverse, shape=(400, 100), dtype=Float32, requires_grad=True)), ('encoder.weight_hh_l1', Parameter (name=encoder.weight_hh_l1, shape=(400, 100), dtype=Float32, requires_grad=True)), ('encoder.weight_hh_l1_reverse', Parameter (name=encoder.weight_hh_l1_reverse, shape=(400, 100), dtype=Float32, requires_grad=True)), ('encoder.bias_ih_l0', Parameter (name=encoder.bias_ih_l0, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_ih_l0_reverse', Parameter (name=encoder.bias_ih_l0_reverse, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_ih_l1', Parameter (name=encoder.bias_ih_l1, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_ih_l1_reverse', Parameter (name=encoder.bias_ih_l1_reverse, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_hh_l0', Parameter (name=encoder.bias_hh_l0, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_hh_l0_reverse', Parameter (name=encoder.bias_hh_l0_reverse, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_hh_l1', Parameter (name=encoder.bias_hh_l1, shape=(400,), dtype=Float32, requires_grad=True)), ('encoder.bias_hh_l1_reverse', Parameter (name=encoder.bias_hh_l1_reverse, shape=(400,), dtype=Float32, requires_grad=True)), ('decoder.weight', Parameter (name=decoder.weight, shape=(2, 400), dtype=Float32, requires_grad=True)), ('decoder.bias', Parameter (name=decoder.bias, shape=(2,), dtype=Float32, requires_grad=True))])\n" + ] + } + ], "source": [ - "import math\n", - "import numpy as np\n", - "from mindspore import Tensor, nn, context, Parameter, ParameterTuple\n", - "from mindspore.common.initializer import initializer\n", + "from mindspore import nn\n", "import mindspore.ops as ops\n", - "\n", - "# 当设备类型为CPU时采用堆叠类型的LSTM\n", - "STACK_LSTM_DEVICE = [\"CPU\"]\n", - "\n", - "# 将短期记忆(h)和长期记忆(c)初始化为0\n", - "def lstm_default_state(batch_size, hidden_size, num_layers, bidirectional):\n", - " \"\"\"LSTM网络输入初始化\"\"\"\n", - " num_directions = 2 if bidirectional else 1\n", - " h = Tensor(np.zeros((num_layers * num_directions, batch_size, hidden_size)).astype(np.float32))\n", - " c = Tensor(np.zeros((num_layers * num_directions, batch_size, hidden_size)).astype(np.float32))\n", - " return h, c\n", - "\n", - "def stack_lstm_default_state(batch_size, hidden_size, num_layers, bidirectional):\n", - " \"\"\"STACK LSTM网络输入初始化\"\"\"\n", - " num_directions = 2 if bidirectional else 1\n", - "\n", - " h_list = c_list = []\n", - " for _ in range(num_layers):\n", - " h_list.append(Tensor(np.zeros((num_directions, batch_size, hidden_size)).astype(np.float32)))\n", - " c_list.append(Tensor(np.zeros((num_directions, batch_size, hidden_size)).astype(np.float32)))\n", - " h, c = tuple(h_list), tuple(c_list)\n", - " return h, c\n", - "\n", - "\n", - "class StackLSTM(nn.Cell):\n", - " \"\"\"\n", - " 实现堆叠LSTM\n", - " \"\"\"\n", - "\n", - " def __init__(self,\n", - " input_size,\n", - " hidden_size,\n", - " num_layers=1,\n", - " has_bias=True,\n", - " batch_first=False,\n", - " dropout=0.0,\n", - " bidirectional=False):\n", - " super(StackLSTM, self).__init__()\n", - " self.num_layers = num_layers\n", - " self.batch_first = batch_first\n", - " self.transpose = ops.Transpose()\n", - "\n", - " num_directions = 2 if bidirectional else 1\n", - "\n", - " input_size_list = [input_size]\n", - " for i in range(num_layers - 1):\n", - " input_size_list.append(hidden_size * num_directions)\n", - "\n", - " # LSTMCell为单层RNN结构,通过堆叠LSTMCell可完成StackLSTM\n", - " layers = []\n", - " for i in range(num_layers):\n", - " layers.append(nn.LSTMCell(input_size=input_size_list[i],\n", - " hidden_size=hidden_size,\n", - " has_bias=has_bias,\n", - " batch_first=batch_first,\n", - " bidirectional=bidirectional,\n", - " dropout=dropout))\n", - "\n", - " # 权重初始化\n", - " weights = []\n", - " for i in range(num_layers):\n", - " weight_size = (input_size_list[i] + hidden_size) * num_directions * hidden_size * 4\n", - " if has_bias:\n", - " bias_size = num_directions * hidden_size * 4\n", - " weight_size = weight_size + bias_size\n", - "\n", - " stdv = 1 / math.sqrt(hidden_size)\n", - " w_np = np.random.uniform(-stdv, stdv, (weight_size, 1, 1)).astype(np.float32)\n", - "\n", - " weights.append(Parameter(initializer(Tensor(w_np), w_np.shape), name=\"weight\" + str(i)))\n", - "\n", - " self.lstms = layers\n", - " self.weight = ParameterTuple(tuple(weights))\n", - "\n", - " def construct(self, x, hx):\n", - " \"\"\"构建网络\"\"\"\n", - " if self.batch_first:\n", - " x = self.transpose(x, (1, 0, 2))\n", - " h, c = hx\n", - " hn = cn = None\n", - " for i in range(self.num_layers):\n", - " x, hn, cn, _, _ = self.lstms[i](x, h[i], c[i], self.weight[i])\n", - " if self.batch_first:\n", - " x = self.transpose(x, (1, 0, 2))\n", - " return x, (hn, cn)\n", - "\n", + "import numpy as np\n", + "from mindspore import Tensor\n", "\n", "class SentimentNet(nn.Cell):\n", " \"\"\"构建SentimentNet\"\"\"\n", @@ -822,7 +745,7 @@ " weight,\n", " batch_size):\n", " super(SentimentNet, self).__init__()\n", - " # 对数据中的词汇进行降维\n", + " # 词嵌入\n", " self.embedding = nn.Embedding(vocab_size,\n", " embed_size,\n", " embedding_table=weight)\n", @@ -830,26 +753,15 @@ " self.trans = ops.Transpose()\n", " self.perm = (1, 0, 2)\n", "\n", - " # 判断是否需要堆叠LSTM\n", - " if context.get_context(\"device_target\") in STACK_LSTM_DEVICE:\n", - "\n", - " self.encoder = StackLSTM(input_size=embed_size,\n", - " hidden_size=num_hiddens,\n", - " num_layers=num_layers,\n", - " has_bias=True,\n", - " bidirectional=bidirectional,\n", - " dropout=0.0)\n", - " self.h, self.c = stack_lstm_default_state(batch_size, num_hiddens, num_layers, bidirectional)\n", - " else:\n", - " self.encoder = nn.LSTM(input_size=embed_size,\n", - " hidden_size=num_hiddens,\n", - " num_layers=num_layers,\n", - " has_bias=True,\n", - " bidirectional=bidirectional,\n", - " dropout=0.0)\n", - " self.h, self.c = lstm_default_state(batch_size, num_hiddens, num_layers, bidirectional)\n", + " self.encoder = nn.LSTM(input_size=embed_size,\n", + " hidden_size=num_hiddens,\n", + " num_layers=num_layers,\n", + " has_bias=True,\n", + " bidirectional=bidirectional,\n", + " dropout=0.0)\n", "\n", " self.concat = ops.Concat(1)\n", + " self.squeeze = ops.Squeeze(axis=0)\n", " if bidirectional:\n", " self.decoder = nn.Dense(num_hiddens * 4, num_classes)\n", " else:\n", @@ -859,9 +771,9 @@ " # input:(64,500,300)\n", " embeddings = self.embedding(inputs)\n", " embeddings = self.trans(embeddings, self.perm)\n", - " output, _ = self.encoder(embeddings, (self.h, self.c))\n", + " output, _ = self.encoder(embeddings)\n", " # states[i] size(64,200) -> encoding.size(64,400)\n", - " encoding = self.concat((output[0], output[499]))\n", + " encoding = self.concat((self.squeeze(output[0:1:1]), self.squeeze(output[499:500:1])))\n", " outputs = self.decoder(encoding)\n", " return outputs\n", "\n", @@ -876,33 +788,7 @@ " batch_size=cfg.batch_size)\n", "\n", "print(network.parameters_dict(recurse=True))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "OrderedDict([('embedding.embedding_table', Parameter (name=embedding.embedding_table, value=Tensor(shape=[252193, 300], dtype=Float32, value=\n", - "[[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00 ... 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", - " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00 ... 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", - " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00 ... 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", - " ...\n", - " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00 ... 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", - " [-2.64310002e-01, 2.03539997e-01, -1.07670002e-01 ... 3.17510009e-01, -6.45749986e-01, 4.42129999e-01],\n", - " [-2.82150000e-01, 2.53950000e-01, 3.94300014e-01 ... 1.75999999e-01, 7.86110014e-02, -7.89420009e-02]]))), ('encoder.weight', Parameter (name=encoder.weight, value=Tensor(shape=[563200, 1, 1], dtype=Float32, value=\n", - "[[[-1.65955983e-02]],\n", - " [[ 4.40648980e-02]],\n", - " [[-9.99771282e-02]],\n", - " ...\n", - " [[-6.54547513e-02]],\n", - " [[ 1.46641862e-02]],\n", - " [[-2.03442890e-02]]]))), ('decoder.weight', Parameter (name=decoder.weight, value=Tensor(shape=[2, 400], dtype=Float32, value=\n", - "[[ 8.68825766e-04, 1.55616635e-02, -3.46743106e-03 ... -1.70452073e-02, 6.96127317e-05, -1.37791187e-02],\n", - " [ 5.52378222e-03, -2.03212705e-02, 1.68735497e-02 ... 1.62047185e-02, 5.66494651e-03, -1.49743268e-02]]))), ('decoder.bias', Parameter (name=decoder.bias, value=Tensor(shape=[2], dtype=Float32, value= [ 0.00000000e+00, 0.00000000e+00])))])\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", -- Gitee