# 用函数拟合能力解释神经网络

## 非线性函数

• relu
• sigmoid

sigmoid容易出现梯度消失的问题，所以用relu的较多。

## 用tensorflow中的relu和sigmoid画图

```import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np

plt.rcParams['axes.unicode_minus']=False
x = tf.placeholder(dtype=tf.float32,shape=[None,1])
relu_y = tf.nn.relu(x)
sigmoid_y = tf.nn.sigmoid(x)

sess = tf.Session()
input_x = np.linspace(-5,5,1000).reshape(-1,1)
relu = sess.run(relu_y,feed_dict={x:input_x})
sigmoid = sess.run(sigmoid_y,feed_dict={x:input_x})
plt.plot(input_x,relu)
plt.plot(input_x,sigmoid)
plt.show(```

relu

sigmoid

## 曲线拟合

#### 一、用1层神经元，1个隐藏单元

```import numpy as  np
import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow.contrib.slim as slim

X = np.linspace(-2,5,1000).reshape(-1,1)
d = np.square(X)+1
d = d.reshape(-1,1)
x = tf.placeholder(dtype=tf.float32,shape=[None,1],name="input_X")
y = tf.placeholder(dtype=tf.float32,shape=[None,1],name="input_Y")
# 定义网络
net = slim.fully_connected(x,1,activation_fn=None)
net = slim.fully_connected(net,1,activation_fn=None)
loss = tf.reduce_mean(tf.square(net-y))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
l = []
for itr in range(5000):
idx = np.random.randint(0,1000,512)
inx = X[idx]
iny = d[idx]
sess.run(train_step,feed_dict={x:inx,y:iny})
if itr%100==0:
print("step:{}".format(itr))
#print()
l_var  = sess.run(loss,feed_dict={x:X,y:d})
l.append(l_var)
plt_x = np.linspace(-2,5,200).reshape(-1,1)
plt_y = sess.run(net,feed_dict={x:plt_x})
plt.plot(plt_x,plt_y,color='#FF0000')
plt.scatter(X,d)
plt.show()
plt.plot(l)
plt.show()```

linear.png

#### 二、用一层隐藏层，16个神经元，

```net = slim.fully_connected(x,1,activation_fn=None)
net = slim.fully_connected(net,16,activation_fn=None)
loss = tf.reduce_mean(tf.square(net-y))```

Figure_1.png

#### 三、用一层隐藏层，2个神经元，加入激活函数relu

```net = slim.fully_connected(x,2,activation_fn=tf.nn.relu)
net = slim.fully_connected(net,1,activation_fn=None)
loss = tf.reduce_mean(tf.square(net-y))```

Figure_1.png

#### 四、用一层隐藏层，4个神经元，加入激活函数

```net = slim.fully_connected(x,2,activation_fn=tf.nn.relu)
net = slim.fully_connected(net,1,activation_fn=None)
loss = tf.reduce_mean(tf.square(net-y))```

Figure_1.png

#### 五、用二层隐藏层，每层2个神经元，加入激活函数

```# 定义网络
net = slim.fully_connected(x,2,activation_fn=tf.nn.relu)
net = slim.fully_connected(net,2,activation_fn=tf.nn.relu)
net = slim.fully_connected(net,1,activation_fn=None)
loss = tf.reduce_mean(tf.square(net-y))```

## 总结

0 条评论

• ### Btrace学习笔记

动态地向目标应用程序的代码注入追踪代码。 JavaComplierApi、JVMTI、Agent、Instrumentation

• ### [TCP/IP] 传输层-ethereal 抓包分析TCP包

开启抓包工具抓取一个HTTP的GET请求,我的ip是10.222.128.159 目标服务器ip是140.143.25.27

• ### 深度学习与神经网络:正则化小栗子(附代码)

在上一篇文章中我们简单说了说AIC,BIC和L1,L2正则化的东西,而今天这篇文章,我们将着重说说正则化.

• ### CentOS6/7开启谷歌官方版BBR内核TCP加速算法

BBR 是谷歌开源的一项针优化网络拥塞控制算法，该算法与锐速、FinalSpeed等都为单边加速、无须客户端，但是 BBR 可以免费使用，不存在授权的问题。Li...

• ### 软件定义技术驱动变革

为应对资金和能源成本所带来的压力，政府部门正对基础设施系统进行融合整合，具体是通过将一系列存储设备、服务器和网络组件集成整合，以便管理员能更有效地管控数据中心营...

• ### Good Customer Service

servebyte.com的服务真是棒，我的一个错误操作导致了CPANEL无法登陆，Josh Cohen非常耐心的为我解答。现在问题终于排除了，servebyt...