Tensorflow 构造一个简单的神经网络

神经层里常见的参数通常有weights、biases和激励函数。

看demo

#coding:utf-8
import tensorflow as tf 
import numpy as np

#定义添加神经层的函数def add_layer(),它有四个参数:
#输入值、输入的大小、输出的大小和激励函数,我们设定默认的激励函数是None
def add_layer(inputs,input_size,output_seiz,activation_function = None):    
    #开始定义weights和biases
    Weights = tf.Variable(tf.random_normal([input_size,output_seiz]))#in_size行, out_size列的随机变量矩阵
    #机器学习中,biases的推荐值不为0,所以我们这里是在0向量的基础上又加了0.1
    biases = tf.Variable(tf.zeros([1,output_seiz])+0.1)
    #定义神经网络未激活的值。tf.matmul()是矩阵的乘法。
    Wx_plus_b = tf.matmul(inputs,Weights)+biases
    #当activation_function——激励函数为None时,输出就是当前的预测值——Wx_plus_b,
    #不为None时,就把Wx_plus_b传到activation_function()函数中得到输出
    if activation_function is None:
        # None 表示线性关系 无需激励函数
        output_seiz = Wx_plus_b
    else:
        output_seiz = activation_function(Wx_plus_b)

    # 返回输出 添加一个神经层的函数——def add_layer()就定义好了。
    return output_seiz


x_data = np.linspace(-1,1,300)[:,np.newaxis] #-1到1这个区间里有300个单位,维度 二维
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) #噪点
y_data = np.square(x_data)-0.5 #x_data的二次放 - 0.5

#输入
x_input = tf.placeholder(tf.float32,[None,1])

y_input = tf.placeholder(tf.float32,[None,1])


#简单的三层神经网络:
# 输入层1个神经元 | 隐藏层假设10个神经元 | 输出层1个神经元

#定义隐藏层
layer_hint = add_layer(x_input,1,10,activation_function = tf.nn.relu)

#定义输出层
layer_output = add_layer(layer_hint,10,1,activation_function = None)

loss =tf.reduce_mean(tf.reduce_sum(tf.square(y_input - layer_output),reduction_indices=[1]))#二者差的平方求和再取平均

#每一个练习的步骤 通过 优化器以0.1的学习效率对误差进行更正提升,下一次就会有更好的结果。
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

#初始
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for i in range(1000):
        sess.run(train_step, feed_dict={x_input:x_data,y_input:y_data})
        if i% 50:
            print sess.run(loss,feed_dict={x_input:x_data,y_input:y_data})

输出

1.02167
0.882461

0.164712

0.0363653

0.00902714

0.00333527

0.00140666
….
0.000842972
….
0.000661918

0.000372133

可以看出误差越来越小了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow 中构建多输入多输出的网络需要使用函数式 API。下面是一个简单的例子: ```python import tensorflow as tf input1 = tf.keras.Input(shape=(10,)) input2 = tf.keras.Input(shape=(20,)) x1 = tf.keras.layers.Dense(32, activation='relu')(input1) x2 = tf.keras.layers.Dense(64, activation='relu')(x1) x3 = tf.keras.layers.Dense(16, activation='relu')(x2) y1 = tf.keras.layers.Dense(32, activation='relu')(input2) y2 = tf.keras.layers.Dense(64, activation='relu')(y1) y3 = tf.keras.layers.Dense(16, activation='relu')(y2) concatenated = tf.keras.layers.concatenate([x3, y3]) output1 = tf.keras.layers.Dense(1, activation='sigmoid', name='output1')(concatenated) output2 = tf.keras.layers.Dense(1, activation='softmax', name='output2')(concatenated) model = tf.keras.Model(inputs=[input1, input2], outputs=[output1, output2]) ``` 在这个例子中,我们定义了两个输入 `input1` 和 `input2`,分别是长度为 10 和 20 的向量。然后我们定义了两个独立的神经网络,每个网络都由三个全连接层组成。接着,我们将两个网络的输出连接在一起,并定义两个输出 `output1` 和 `output2`。最后我们使用函数式 API 将输入和输出传递给 `tf.keras.Model` 函数来构建模型。 注意,`concatenate` 层用于将两个网络的输出连接在一起。在这个例子中,我们使用了两个输出层,分别是 `output1` 和 `output2`。如果需要,你可以根据需要使用更多的输出层。 希望这个例子能帮助你构建多输入多输出的 TensorFlow 网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值