{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:50.826940Z", "iopub.status.busy": "2023-04-04T17:07:50.826940Z", "iopub.status.idle": "2023-04-04T17:07:51.182950Z", "shell.execute_reply": "2023-04-04T17:07:51.182950Z" } }, "outputs": [], "source": [ "from onnx import *" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.186951Z", "iopub.status.busy": "2023-04-04T17:07:51.186951Z", "iopub.status.idle": "2023-04-04T17:07:51.309954Z", "shell.execute_reply": "2023-04-04T17:07:51.308951Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int attribute:\n", "\n", "name: \"this_is_an_int\"\n", "i: 1701\n", "type: INT\n", "\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# Int Attibute\n", "arg = helper.make_attribute(\"this_is_an_int\", 1701)\n", "print(\"\\nInt attribute:\\n\")\n", "print(arg)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.334952Z", "iopub.status.busy": "2023-04-04T17:07:51.334952Z", "iopub.status.idle": "2023-04-04T17:07:51.450951Z", "shell.execute_reply": "2023-04-04T17:07:51.449950Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Float attribute:\n", "\n", "name: \"this_is_a_float\"\n", "f: 3.140000104904175\n", "type: FLOAT\n", "\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# Float Attribute\n", "arg = helper.make_attribute(\"this_is_a_float\", 3.14)\n", "print(\"\\nFloat attribute:\\n\")\n", "print(arg)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.453950Z", "iopub.status.busy": "2023-04-04T17:07:51.453950Z", "iopub.status.idle": "2023-04-04T17:07:51.555948Z", "shell.execute_reply": "2023-04-04T17:07:51.555948Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "String attribute:\n", "\n", "name: \"this_is_a_string\"\n", "s: \"string_content\"\n", "type: STRING\n", "\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# String Attribute\n", "arg = helper.make_attribute(\"this_is_a_string\", \"string_content\")\n", "print(\"\\nString attribute:\\n\")\n", "print(arg)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.558950Z", "iopub.status.busy": "2023-04-04T17:07:51.558950Z", "iopub.status.idle": "2023-04-04T17:07:51.662949Z", "shell.execute_reply": "2023-04-04T17:07:51.662949Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Repeated int attribute:\n", "\n", "name: \"this_is_a_repeated_int\"\n", "ints: 1\n", "ints: 2\n", "ints: 3\n", "ints: 4\n", "type: INTS\n", "\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# Repeated Attribute\n", "arg = helper.make_attribute(\"this_is_a_repeated_int\", [1, 2, 3, 4])\n", "print(\"\\nRepeated int attribute:\\n\")\n", "print(arg)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.665950Z", "iopub.status.busy": "2023-04-04T17:07:51.665950Z", "iopub.status.idle": "2023-04-04T17:07:51.774949Z", "shell.execute_reply": "2023-04-04T17:07:51.774949Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "NodeProto:\n", "\n", "input: \"X\"\n", "output: \"Y\"\n", "op_type: \"Relu\"\n", "\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# node\n", "node_proto = helper.make_node(\"Relu\", [\"X\"], [\"Y\"])\n", "\n", "print(\"\\nNodeProto:\\n\")\n", "print(node_proto)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.778952Z", "iopub.status.busy": "2023-04-04T17:07:51.777951Z", "iopub.status.idle": "2023-04-04T17:07:51.883948Z", "shell.execute_reply": "2023-04-04T17:07:51.883948Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "NodeProto:\n", "\n", "input: \"X\"\n", "input: \"W\"\n", "input: \"B\"\n", "output: \"Y\"\n", "op_type: \"Conv\"\n", "attribute {\n", " name: \"kernel\"\n", " i: 3\n", " type: INT\n", "}\n", "attribute {\n", " name: \"pad\"\n", " i: 1\n", " type: INT\n", "}\n", "attribute {\n", " name: \"stride\"\n", " i: 1\n", " type: INT\n", "}\n", "\n", "\n", "More Readable NodeProto (no args yet):\n", "\n", "%Y = Conv[kernel = 3, pad = 1, stride = 1](%X, %W, %B)\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# node with args\n", "node_proto = helper.make_node(\n", " \"Conv\", [\"X\", \"W\", \"B\"], [\"Y\"],\n", " kernel=3, stride=1, pad=1)\n", "\n", "# This is just for making the attributes to be printed in order\n", "node_proto.attribute.sort(key=lambda attr: attr.name)\n", "print(\"\\nNodeProto:\\n\")\n", "print(node_proto)\n", "\n", "print(\"\\nMore Readable NodeProto (no args yet):\\n\")\n", "print(helper.printable_node(node_proto))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.886948Z", "iopub.status.busy": "2023-04-04T17:07:51.886948Z", "iopub.status.idle": "2023-04-04T17:07:51.992949Z", "shell.execute_reply": "2023-04-04T17:07:51.992949Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "graph proto:\n", "\n", "node {\n", " input: \"X\"\n", " input: \"W1\"\n", " input: \"B1\"\n", " output: \"H1\"\n", " op_type: \"FC\"\n", "}\n", "node {\n", " input: \"H1\"\n", " output: \"R1\"\n", " op_type: \"Relu\"\n", "}\n", "node {\n", " input: \"R1\"\n", " input: \"W2\"\n", " input: \"B2\"\n", " output: \"Y\"\n", " op_type: \"FC\"\n", "}\n", "name: \"MLP\"\n", "input {\n", " name: \"X\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", "}\n", "input {\n", " name: \"W1\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", "}\n", "input {\n", " name: \"B1\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", "}\n", "input {\n", " name: \"W2\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", "}\n", "input {\n", " name: \"B2\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", "}\n", "output {\n", " name: \"Y\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "\n", "More Readable GraphProto:\n", "\n", "graph MLP (\n", " %X[FLOAT, 1]\n", " %W1[FLOAT, 1]\n", " %B1[FLOAT, 1]\n", " %W2[FLOAT, 1]\n", " %B2[FLOAT, 1]\n", ") {\n", " %H1 = FC(%X, %W1, %B1)\n", " %R1 = Relu(%H1)\n", " %Y = FC(%R1, %W2, %B2)\n", " return %Y\n", "}\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# graph\n", "graph_proto = helper.make_graph(\n", " [\n", " helper.make_node(\"FC\", [\"X\", \"W1\", \"B1\"], [\"H1\"]),\n", " helper.make_node(\"Relu\", [\"H1\"], [\"R1\"]),\n", " helper.make_node(\"FC\", [\"R1\", \"W2\", \"B2\"], [\"Y\"]),\n", " ],\n", " \"MLP\",\n", " [\n", " helper.make_tensor_value_info(\"X\" , TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"W1\", TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"B1\", TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"W2\", TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"B2\", TensorProto.FLOAT, [1]),\n", " ],\n", " [\n", " helper.make_tensor_value_info(\"Y\", TensorProto.FLOAT, [1]),\n", " ]\n", ")\n", "\n", "print(\"\\ngraph proto:\\n\")\n", "print(graph_proto)\n", "\n", "print(\"\\nMore Readable GraphProto:\\n\")\n", "print(helper.printable_graph(graph_proto))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2023-04-04T17:07:51.995950Z", "iopub.status.busy": "2023-04-04T17:07:51.995950Z", "iopub.status.idle": "2023-04-04T17:07:52.102950Z", "shell.execute_reply": "2023-04-04T17:07:52.102950Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "NodeProto that contains a graph:\n", "\n", "input: \"Input\"\n", "input: \"W1\"\n", "input: \"B1\"\n", "input: \"W2\"\n", "input: \"B2\"\n", "output: \"Output\"\n", "op_type: \"graph\"\n", "attribute {\n", " name: \"graph\"\n", " graphs {\n", " node {\n", " input: \"X\"\n", " input: \"W1\"\n", " input: \"B1\"\n", " output: \"H1\"\n", " op_type: \"FC\"\n", " }\n", " node {\n", " input: \"H1\"\n", " output: \"R1\"\n", " op_type: \"Relu\"\n", " }\n", " node {\n", " input: \"R1\"\n", " input: \"W2\"\n", " input: \"B2\"\n", " output: \"Y\"\n", " op_type: \"FC\"\n", " }\n", " name: \"MLP\"\n", " input {\n", " name: \"X\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", " }\n", " input {\n", " name: \"W1\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", " }\n", " input {\n", " name: \"B1\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", " }\n", " input {\n", " name: \"W2\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", " }\n", " input {\n", " name: \"B2\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", " }\n", " output {\n", " name: \"Y\"\n", " type {\n", " tensor_type {\n", " elem_type: 1\n", " shape {\n", " dim {\n", " dim_value: 1\n", " }\n", " }\n", " }\n", " }\n", " }\n", " }\n", " type: GRAPHS\n", "}\n", "\n" ] } ], "source": [ "# NBVAL_SKIP\n", "# Protobuf 4 and Protobuf 3 might output different order of protobuf fields\n", "\n", "# An node that is also a graph\n", "graph_proto = helper.make_graph(\n", " [\n", " helper.make_node(\"FC\", [\"X\", \"W1\", \"B1\"], [\"H1\"]),\n", " helper.make_node(\"Relu\", [\"H1\"], [\"R1\"]),\n", " helper.make_node(\"FC\", [\"R1\", \"W2\", \"B2\"], [\"Y\"]),\n", " ],\n", " \"MLP\",\n", " [\n", " helper.make_tensor_value_info(\"X\" , TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"W1\", TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"B1\", TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"W2\", TensorProto.FLOAT, [1]),\n", " helper.make_tensor_value_info(\"B2\", TensorProto.FLOAT, [1]),\n", " ],\n", " [\n", " helper.make_tensor_value_info(\"Y\", TensorProto.FLOAT, [1]),\n", " ]\n", ")\n", "\n", "# output = ThisSpecificgraph([input, w1, b1, w2, b2])\n", "node_proto = helper.make_node(\n", " \"graph\",\n", " [\"Input\", \"W1\", \"B1\", \"W2\", \"B2\"],\n", " [\"Output\"],\n", " graph=[graph_proto],\n", ")\n", "\n", "print(\"\\nNodeProto that contains a graph:\\n\")\n", "print(node_proto)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.11" }, "vscode": { "interpreter": { "hash": "f9fa6017a53cd3e89c2ae5d3938d7461048c25b2aa8e520267fca421440325a1" } } }, "nbformat": 4, "nbformat_minor": 1 }