replacing ext_kf by import from moisture_models.py
[notebooks.git] / tutorials / Functional_RNN.ipynb
blobf771af55ff8abff4f374cd66a5fa02f925f200d7
2   "nbformat": 4,
3   "nbformat_minor": 0,
4   "metadata": {
5     "colab": {
6       "name": "Functional RNN.ipynb",
7       "provenance": [],
8       "collapsed_sections": []
9     },
10     "kernelspec": {
11       "name": "python3",
12       "display_name": "Python 3"
13     },
14     "language_info": {
15       "name": "python"
16     }
17   },
18   "cells": [
19     {
20       "cell_type": "code",
21       "source": [
22         "import tensorflow as tf\n",
23         "tf.__version__"
24       ],
25       "metadata": {
26         "colab": {
27           "base_uri": "https://localhost:8080/",
28           "height": 37
29         },
30         "id": "IzBT2yHt1NjL",
31         "outputId": "d587af73-00d3-44a1-a970-200c2006c615"
32       },
33       "execution_count": null,
34       "outputs": [
35         {
36           "output_type": "execute_result",
37           "data": {
38             "text/plain": [
39               "'2.8.2'"
40             ],
41             "application/vnd.google.colaboratory.intrinsic+json": {
42               "type": "string"
43             }
44           },
45           "metadata": {},
46           "execution_count": 17
47         }
48       ]
49     },
50     {
51       "cell_type": "code",
52       "execution_count": null,
53       "metadata": {
54         "colab": {
55           "base_uri": "https://localhost:8080/",
56           "height": 466
57         },
58         "id": "IUzn0o5VvjWg",
59         "outputId": "943ecd0d-d337-41b8-dbe3-77e9baef34aa"
60       },
61       "outputs": [
62         {
63           "output_type": "execute_result",
64           "data": {
65             "text/plain": [
66               "<IPython.core.display.Image object>"
67             ],
68             "image/png": "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\n"
69           },
70           "metadata": {},
71           "execution_count": 38
72         }
73       ],
74       "source": [
75         "inputs = tf.keras.Input(shape=(3,5,))\n",
76         "t1 = tf.keras.layers.LSTM(4)(inputs) # input shape shape [batch, timesteps, feature]\n",
77         "t2 = tf.keras.layers.Dense(4)(t1)\n",
78         "x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(t2)\n",
79         "outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)\n",
80         "model = tf.keras.Model(inputs=inputs, outputs=outputs)\n",
81         "tf.keras.utils.plot_model(model)"
82       ]
83     },
84     {
85       "cell_type": "code",
86       "source": [
87         "model.summary(\n",
88         "    line_length=None,\n",
89         "    positions=None,\n",
90         "    print_fn=None,\n",
91         "    expand_nested=False,\n",
92         "    show_trainable=False,\n",
93         ")\n"
94       ],
95       "metadata": {
96         "colab": {
97           "base_uri": "https://localhost:8080/"
98         },
99         "id": "m_HWHhzoy2kO",
100         "outputId": "8bb5309e-ec1b-4d1b-adf3-1fd0d8e06961"
101       },
102       "execution_count": null,
103       "outputs": [
104         {
105           "output_type": "stream",
106           "name": "stdout",
107           "text": [
108             "Model: \"model\"\n",
109             "_________________________________________________________________\n",
110             " Layer (type)                Output Shape              Param #   \n",
111             "=================================================================\n",
112             " input_5 (InputLayer)        [(None, 3)]               0         \n",
113             "                                                                 \n",
114             " dense (Dense)               (None, 4)                 16        \n",
115             "                                                                 \n",
116             " dense_1 (Dense)             (None, 5)                 25        \n",
117             "                                                                 \n",
118             "=================================================================\n",
119             "Total params: 41\n",
120             "Trainable params: 41\n",
121             "Non-trainable params: 0\n",
122             "_________________________________________________________________\n"
123           ]
124         }
125       ]
126     },
127     {
128       "cell_type": "code",
129       "source": [
130         "model.plot_model()"
131       ],
132       "metadata": {
133         "colab": {
134           "base_uri": "https://localhost:8080/",
135           "height": 164
136         },
137         "id": "mddJmC7KzEYD",
138         "outputId": "d2a50371-a703-44ae-854b-1a0092860ef7"
139       },
140       "execution_count": null,
141       "outputs": [
142         {
143           "output_type": "error",
144           "ename": "AttributeError",
145           "evalue": "ignored",
146           "traceback": [
147             "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
148             "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
149             "\u001b[0;32m<ipython-input-15-691d3246f92a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
150             "\u001b[0;31mAttributeError\u001b[0m: 'Functional' object has no attribute 'plot_model'"
151           ]
152         }
153       ]
154     }
155   ]