## Question

## Transcribed Text

## Solution Preview

This material may consist of step-by-step explanations on how to solve a problem or examples of proper writing, including the use of citations, references, bibliographies, and formatting. This material is made available for the sole purpose of studying and learning - misuse is strictly forbidden.

{"cells": [

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# HW1-1 Simulate a Function"

]

},

{

"cell_type": "code",

"execution_count": 1,

"metadata": {},

"outputs": [],

"source": [

"import os\n",

"import tensorflow as tf\n",

"import numpy as np\n",

"import matplotlib.pyplot as plt\n",

"from sklearn import datasets\n",

"from sklearn.preprocessing import MinMaxScaler\n",

"from sklearn.decomposition import PCA\n",

"\n",

"class DeepNeuralNetwork:\n",

" \"\"\"\n",

" A class that models multilayer Perceptron - Deep neural network.\n",

" Input parameters:\n",

" units: a list that defines the number of neurons for each hidden layer\n",

" \"\"\"\n",

" def __init__(self, units: list, learning_rate: float):\n",

"\n",

" self.units = units\n",

" self.learning_rate = learning_rate\n",

" \n",

" # initiate a graph \n",

" self.g = tf.Graph()\n",

" with self.g.as_default():\n",

" # make a placeholders for input values and targets\n",

" self.tf_x = tf.compat.v1.placeholder(\n",

" tf.float32, shape=(None, 1), name=\"tf_x\"\n",

" )\n",

" self.tf_y = tf.compat.v1.placeholder(tf.float32, (None), name=\"tf_y\")\n",

" self.build_model() # build a model\n",

"\n",

" def make_fc_layer(\n",

" self, input_tensor, n_output_units: int, activation_fn=None, name=\"\"\n",

" ):\n",

" \"A function that creates fully connected layer\"\n",

" \n",

" input_shape = input_tensor.get_shape().as_list()[1:] # get input shape of the input tensor\n",

" n_input_units = np.prod(input_shape)\n",

"\n",

" weights_shape = [n_input_units, n_output_units]\n",

" \n",

" # initialize weights for a layer, use uniform initialization\n",

" weights = tf.Variable(\n",

" tf.random.uniform(weights_shape, minval=-0.5, maxval=0.5),\n",

" name=f\"{name}_fc_weights\",\n",

" shape=weights_shape,\n",

" trainable=True,\n",

" )\n",

" # initialze bias\n",

" bias = tf.Variable(\n",

" tf.zeros(shape=[n_output_units], name=f\"{name}_fc_bias\"), trainable=True\n",

" )\n",

" \n",

" # make output tensor by multiplying input tensor and added weights and add bias\n",

" layer = tf.matmul(input_tensor, weights)\n",

" layer = tf.nn.bias_add(layer, bias, name=\"net_pre_activation\")\n",

" \n",

" if activation_fn is not None:\n",

" # function activation ( add non-linearity to the model )\n",

" layer = activation_fn(layer, name=\"activation\")\n",

"\n",

" return layer\n",

"\n",

" def build_model(self):\n",

" \"\"\"\n",

" A function that builds fully connected deep neural network\n",

" \"\"\"\n",

"\n",

" self.layers = [self.tf_x] # list of all layers\n",

" input_tensor = self.tf_x\n",

" \n",

" for i, unit in enumerate(self.units):\n",

" if i + 1 == len(self.units):\n",

" fc_layer = self.make_fc_layer(input_tensor, 1, name=\"output_layer\")\n",

" self.layers.append(fc_layer)\n",

" continue\n",

"\n",

" fc_layer = self.make_fc_layer(\n",

" input_tensor, unit...