我试图用TensorFlow建立一个简单的神经网络。目标是在32像素x 32像素的图像中找到矩形的中心。矩形由五个向量描述。第一个向量是位置向量,其他四个是方向向量,组成矩形边。一个向量有两个值(x和y)。
该图像的相应输入为(2,5)(0,4)(6,0)(0,-4)(-6,0)。中心(以及所需输出)位于(5,7)。
我想出的代码如下所示:
import tensorflow as tf import numpy as np import Rectangle_Records def init_weights(shape): """ Weight initialization """ weights = tf.random_normal(shape, stddev=0.1) return tf.Variable(weights) def forwardprop(x, w_1, w_2): """ Forward-propagation """ h = tf.nn.sigmoid(tf.matmul(x, w_1)) y_predict = tf.matmul(h, w_2) return y_predict def main(): x_size = 10 y_size = 2 h_1_size = 256 # Prepare input data input_data = Rectangle_Records.DataSet() x = tf.placeholder(tf.float32, shape = [None, x_size]) y_label = tf.placeholder(tf.float32, shape = [None, y_size]) # Weight initializations w_1 = init_weights((x_size, h_1_size)) w_2 = init_weights((h_1_size, y_size)) # Forward propagation y_predict = forwardprop(x, w_1, w_2) # Backward propagation cost = tf.reduce_mean(tf.square(y_predict - y_label)) updates = tf.train.GradientDescentOptimizer(0.01).minimize(cost) # Run sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) for i in range(200): batch = input_data.next_batch(10) sess.run(updates, feed_dict = {x: batch[0], y_label: batch[1]}) sess.close() if __name__ == "__main__": main()
遗憾的是,网络无法正常学习。结果太离谱了。例如,[[3.74561882,3.70766664]]当它应该环绕[[3,7.]]时。我做错了什么?
有很多方法可以提高神经网络的性能。请尝试以下一项或多项操作:
你忘了添加偏见。
def init_bias(shape):
biases = tf.random_normal(shape)
return tf.Variable(biases)
def forwardprop(x, w_1, w_2, b_1, b_2):
""" Forward-propagation """
h = tf.nn.sigmoid(tf.matmul(x, w_1) + b_1)
y_predict = tf.matmul(h, w_2) + b_2
return y_predict
把它改成这个
w_1 = init_weights((x_size, h_1_size))
w_2 = init_weights((h_1_size, y_size))
b_1 = init_bias((h_1_size,))
b_2 = init_bias((y_size,))
# Forward propagation
y_predict = forwardprop(x, w_1, w_2, b_1, b_2)
这将给你更好的准确性。然后,您可以尝试添加更多层,尝试不同的激活功能等,以进一步改进。
主要问题是你的整个训练只针对一个时代,这还不够。尝试以下更改:
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for j in range(30):
input_data = Rectangle_Records.DataSet()
for i in range(200):
batch = input_data.next_batch(10)
loss, _ = sess.run([cost,updates], feed_dict = {x: batch[0], y_label: batch[1]})
pred = sess.run(y_predict, feed_dict={x: batch[0]})
print('Cost:', loss )
print('pred:', pred)
print('actual:', batch[1])
sess.close()
将优化器更改为动量优化器以加快收敛速度:tf.train.AdamOptimizer(0.01)。最小化(成本)
本文向大家介绍TensorFlow实现简单卷积神经网络,包括了TensorFlow实现简单卷积神经网络的使用技巧和注意事项,需要的朋友参考一下 本文使用的数据集是MNIST,主要使用两个卷积层加一个全连接层构建的卷积神经网络。 先载入MNIST数据集(手写数字识别集),并创建默认的Interactive Session(在没有指定回话对象的情况下运行变量) 在定义一个初始化函数,因为卷积神经网络有
我正在建立一个简单的神经网络。数据是一个231长的向量,它是一个热编码的向量。每个231个长向量被分配一个8个长的热编码标签。 到目前为止,我的代码是: 问题是输出层是8个单位,但是我的标签不是单个单位,它们是一个热编码的8个长矢量。如何将此表示为输出? 错误消息是: 无法用非浮点dtype构建密集层 完全回溯:
我经常读到,前馈和递归神经网络(RNNs)之间存在着根本的区别,这是由于前馈网络缺乏内部状态和短期记忆。乍一看,我觉得这似乎有理。 然而,当学习一个递归神经网络的反向传播通过时间算法时,递归网络转化为等价的前馈网络,如果我理解正确的话。 这就意味着,事实上没有根本的区别。为什么RNN在某些任务(图像识别、时间序列预测等)中比深度前馈网络表现得更好?
本文向大家介绍tensorflow学习笔记之简单的神经网络训练和测试,包括了tensorflow学习笔记之简单的神经网络训练和测试的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了用简单的神经网络来训练和测试的具体代码,供大家参考,具体内容如下 刚开始学习tf时,我们从简单的地方开始。卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始。
本文向大家介绍TensorFlow神经网络优化策略学习,包括了TensorFlow神经网络优化策略学习的使用技巧和注意事项,需要的朋友参考一下 在神经网络模型优化的过程中,会遇到许多问题,比如如何设置学习率的问题,我们可通过指数衰减的方式让模型在训练初期快速接近较优解,在训练后期稳定进入最优解区域;针对过拟合问题,通过正则化的方法加以应对;滑动平均模型可以让最终得到的模型在未知数据上表现的更加健壮
神经网络和深度学习是一本免费的在线书。本书会教会你: 神经网络,一种美妙的受生物学启发的编程范式,可以让计算机从观测数据中进行学习 深度学习,一个强有力的用于神经网络学习的众多技术的集合 神经网络和深度学习目前给出了在图像识别、语音识别和自然语言处理领域中很多问题的最好解决方案。本书将会教你在神经网络和深度学习背后的众多核心概念。 想了解本书选择的观点的更多细节,请看这里。或者直接跳到第一章 开始