{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.simplefilter(action='ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 以矩阵运算仿真神经网络" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.1 y = relu((X * W) + b)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "result: [[-0.35999998 0.28 ]]\n", "y: [[0. 0.28]]\n" ] } ], "source": [ "X = tf.Variable([[0.4, 0.2, 0.4]])\n", "W = tf.Variable([\n", " [-0.5, -0.2],\n", " [-0.3, 0.4],\n", " [-0.5, 0.2]\n", "])\n", "b = tf.Variable([[0.1, 0.2]])\n", "result = tf.matmul(X, W) + b\n", "y = tf.nn.relu(result)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " print('result:', sess.run(result))\n", " print('y:', sess.run(y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2 y = sigmoid((X * W) + b)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "result: [[-0.35999998 0.28 ]]\n", "y: [[0.41095957 0.5695462 ]]\n" ] } ], "source": [ "X = tf.Variable([[0.4, 0.2, 0.4]])\n", "W = tf.Variable([\n", " [-0.5, -0.2],\n", " [-0.3, 0.4],\n", " [-0.5, 0.2]\n", "])\n", "b = tf.Variable([[0.1, 0.2]])\n", "result = tf.matmul(X, W) + b\n", "y = tf.nn.sigmoid(result)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " print('result:', sess.run(result))\n", " print('y:', sess.run(y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.3 以正态分布的随机数生成权重与偏差的初始值" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W: [[-2.075261 0.4418381 ]\n", " [-0.4115933 0.14172077]\n", " [ 1.1376783 0.5455061 ]]\n", "b: [[-0.7646976 0.7440777]]\n", "y: [[0. 1.1673596]]\n" ] } ], "source": [ "X = tf.Variable([[0.4, 0.2, 0.4]])\n", "W = tf.Variable(tf.random_normal([3, 2]))\n", "b = tf.Variable(tf.random_normal([1, 2]))\n", "result = tf.matmul(X, W) + b\n", "y = tf.nn.relu(result)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " w_, b_, y_ = sess.run((W, b, y))\n", " print('W:', w_)\n", " print('b:', b_)\n", " print('y:', y_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.4 正态分布的随机数 tf.random_normal" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "normal data length: 1000\n", "[-1.9249927 -1.4921683 -0.98833495 -0.9466415 1.0175036 0.7307655\n", " -1.0541631 0.813238 0.36450565 0.4377187 -0.69136196 -1.051614\n", " 0.44473353 0.11826661 -0.93143207 1.0840364 1.1706591 0.8179217\n", " 0.0826885 0.7686695 0.27023697 1.2993698 0.61665887 0.3910737\n", " -0.6657248 -0.87913203 1.6416286 0.34995267 0.7268337 -0.62023956]\n" ] } ], "source": [ "normal_array = tf.random_normal([1000])\n", "with tf.Session() as sess:\n", " normal_data = sess.run(normal_array)\n", "\n", "print('normal data length:', len(normal_data))\n", "print(normal_data[:30])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(normal_data)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 以 placeholder 传入 X 值" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.1 以 placeholder 传入 1*3 的二维数组" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W: [[ 1.5918082 -0.9832617 ]\n", " [-0.02635845 -0.20186134]\n", " [ 0.23869179 -0.29970053]]\n", "b: [[-1.3642514 -1.2061498]]\n", "y: [[0. 0.]]\n" ] } ], "source": [ "X = tf.placeholder('float', [None, 3])\n", "W = tf.Variable(tf.random_normal([3, 2]))\n", "b = tf.Variable(tf.random_normal([1, 2]))\n", "result = tf.matmul(X, W) + b\n", "y = tf.nn.relu(result)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " x_array = np.array([[0.4, 0.2, 0.4]])\n", " w_, b_, y_ = sess.run((W, b, y), feed_dict={X: x_array})\n", " print('W:', w_)\n", " print('b:', b_)\n", " print('y:', y_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 以 placeholder 传入 3*3 的二维数组" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W: [[-0.11468825 1.9673066 ]\n", " [-0.08138695 -0.48802418]\n", " [ 0.96089125 -0.6681382 ]]\n", "b: [[ 1.014417 -1.1596572]]\n", "y: [[0.79193366 0.32353035]\n", " [0.8065741 0.2499753 ]\n", " [0.81652975 0.32996914]]\n" ] } ], "source": [ "X = tf.placeholder('float', [None, 3])\n", "W = tf.Variable(tf.random_normal([3, 2]))\n", "b = tf.Variable(tf.random_normal([1, 2]))\n", "result = tf.matmul(X, W) + b\n", "y = tf.nn.sigmoid(result)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " x_array = np.array([[0.4, 0.2, 0.4],\n", " [0.3, 0.4, 0.5],\n", " [0.3, -0.4, 0.5]])\n", " w_, b_, y_ = sess.run((W, b, y), feed_dict={X: x_array})\n", " print('W:', w_)\n", " print('b:', b_)\n", " print('y:', y_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 创建 layer 函数以矩阵运算仿真神经网络" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.1 定义 layer 函数" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def layer(output_dim, input_dim, inputs, activation=None):\n", " W = tf.Variable(tf.random_normal([input_dim, output_dim]))\n", " b = tf.Variable(tf.random_normal([1, output_dim]))\n", " result = tf.matmul(inputs, W) + b\n", " \n", " if activation is None:\n", " outputs = result\n", " else:\n", " outputs = activation(result)\n", " \n", " return outputs" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X: [[ 0.4 0.2 0.4 0.1]\n", " [ 0.3 0.4 0.5 0.3]\n", " [ 0.3 -0.4 0.5 0.2]]\n", "y: [[1.4922328 0. 1.8698667]\n", " [1.2684783 0. 1.922584 ]\n", " [1.9266617 0. 1.3748204]]\n" ] } ], "source": [ "X = tf.placeholder('float', [None, 4])\n", "y = layer(output_dim=3, input_dim=4, inputs=X, activation=tf.nn.relu)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " x_array = np.array([[0.4, 0.2, 0.4, 0.1],\n", " [0.3, 0.4, 0.5, 0.3],\n", " [0.3, -0.4, 0.5, 0.2]])\n", " x_, y_ = sess.run((X, y), feed_dict={X: x_array})\n", " print('X:', x_)\n", " print('y:', y_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.2 使用 layer 函数建立3层神经网络" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X: [[0.4 0.2 0.4 0.5]]\n", "h: [[2.3432775 2.0743177 0.61050224]]\n", "y: [[1.5198518 0.38232744]]\n" ] } ], "source": [ "X = tf.placeholder('float', [None, 4])\n", "h = layer(output_dim=3, input_dim=4, inputs=X, activation=tf.nn.relu)\n", "y = layer(output_dim=2, input_dim=3, inputs=h)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " x_array = np.array([[0.4, 0.2, 0.4, 0.5]])\n", " x_, h_, y_ = sess.run((X, h, y), feed_dict={X: x_array})\n", " print('X:', x_)\n", " print('h:', h_)\n", " print('y:', y_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. 创建 layer_debug 函数显示权重与偏差" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def layer_debug(output_dim, input_dim, inputs, activation=None):\n", " W = tf.Variable(tf.random_normal([input_dim, output_dim]))\n", " b = tf.Variable(tf.random_normal([1, output_dim]))\n", " result = tf.matmul(inputs, W) + b\n", " \n", " if activation is None:\n", " outputs = result\n", " else:\n", " outputs = activation(result)\n", " \n", " return outputs, W, b" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X: [[0.4 0.2 0.4 0.5]]\n", "h: [[0.9840085 0. 0. ]]\n", "W1: [[-0.93856984 -0.5609033 -0.68849075]\n", " [ 0.4549042 -0.6213276 0.42857125]\n", " [-0.8169483 1.1261041 0.26323652]\n", " [ 0.21705349 -1.0245273 1.1000092 ]]\n", "b1: [[ 1.4867082 -1.0011966 -0.766666 ]]\n", "y: [[-0.22585669 -2.174033 ]]\n", "W2: [[-0.53245366 -2.2362213 ]\n", " [ 0.68009377 1.047862 ]\n", " [ 0.23251943 -1.2658181 ]]\n", "b2: [[0.2980822 0.02642769]]\n" ] } ], "source": [ "X = tf.placeholder('float', [None, 4])\n", "h, W1, b1 = layer_debug(output_dim=3, input_dim=4, inputs=X, activation=tf.nn.relu)\n", "y, W2, b2 = layer_debug(output_dim=2, input_dim=3, inputs=h)\n", "\n", "with tf.Session() as sess:\n", " sess.run(tf.global_variables_initializer())\n", " x_array = np.array([[0.4, 0.2, 0.4, 0.5]])\n", " x_, h_, y_, w1_, b1_, w2_, b2_ = sess.run((X, h, y, W1, b1, W2, b2), feed_dict={X: x_array})\n", " print('X:', x_)\n", " print('h:', h_)\n", " print('W1:', w1_)\n", " print('b1:', b1_)\n", " print('y:', y_)\n", " print('W2:', w2_)\n", " print('b2:', b2_)" ] } ], "metadata": { "kernelspec": { "display_name": "tensorflow-keras-practice", "language": "python", "name": "tensorflow-keras-practice" }, "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }