能否有人帮助或指导我如何改进以使其正常工作?
我将输入的数量改为2,并生成了一些随机数据,“x1”和“x2”(一个数字加到另一个数字上)。我的想法是使用变量“add”和“mul”作为真实输出,并基于此计算成本(变量“Y”),但我在操纵数据以正确输入方面遇到了麻烦。
我尝试创建另一个变量:
x = tf.Variable([100 * np.random.random_sample([100]), 100 * np.random.random_sample([100]))
以及其他几种替代方法,但这导致了错误。如果我的代码中还有其他问题,请批评!任何帮助都很有用。
谢谢你。
'''使用TensorFlow库实现的循环神经网络示例。作者: *********'''import numpy as npimport tensorflow as tffrom tensorflow.models.rnn import rnn, rnn_cell# import matplotlib.pyplot as plt# from mpl_toolkits.mplot3d import Axes3D# 参数training_iters = 1000n_epochs = 1000batch_size = 128display_step = 100learning_rate = 0.001n_observations = 100n_input = 2 # 输入数据(数字 + 数字)n_steps = 28 # 时间步n_hidden_1 = 256 # 第一层特征数量n_hidden_2 = 256 # 第二层特征数量n_classes = 1 # 输出X = tf.placeholder("float", [None, n_input])X1 = tf.placeholder(tf.float32)X2 = tf.placeholder(tf.float32)Y = tf.placeholder(tf.float32)# 随机输入数据x1 = 100 * np.random.random_sample([100,])x2 = 100 * np.random.random_sample([100,])add = tf.add(x1, x2)mul = tf.mul(X1, X2)weights = { 'hidden1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), #'hidden2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_hidden_1, n_classes]))}biases = { 'hidden1': tf.Variable(tf.random_normal([n_hidden_1])), #'hidden2': tf.Variable(tf.random_normal([n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_classes]))}def RNN(_X1, _weights, _biases): # 第一层 layer_1 = tf.add(tf.matmul(_X1, weights['hidden1']), biases['hidden1']) layer_1 = tf.nn.relu(layer_1) # 第二层 # layer_1_2 = tf.add(tf.matmul(_X2, weights['hidden2']), biases['hidden2']) # layer_1_2 = tf.nn.relu(layer_1_2) # 使用RELU激活的隐藏层 layer_2 = tf.add(tf.matmul(layer_1, weights['out']), biases['out']) output = tf.nn.relu(layer_2) return outputpred = RNN(X1, weights, biases)cost = tf.reduce_sum(tf.pow(pred - Y, 2)) / (n_observations - 1)optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) # Adam优化器correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(Y,1))init = tf.initialize_all_variables()# initData = tf.initialize_variables(x1.all(), x2.all())with tf.Session() as sess: # 这里我们告诉TensorFlow我们想要初始化图中的所有变量,以便我们可以使用它们 sess.run(init) # 拟合所有训练数据 prev_training_cost = 0.0 for epoch_i in range(n_epochs) : for (_x1) in x1: for (_x2) in x2: print("输入1:") print(_x1) print("输入2:") print(_x2) print("加法函数: ") print(sess.run(add, feed_dict={X1: x1, X2: x2})) y = sess.run(add, feed_dict={X1: x1, X2: x2}) print(y) sess.run(optimizer, feed_dict={X: x, Y: y}) training_cost = sess.run( cost, feed_dict={X: xs, Y: ys}) print(training_cost) if epoch_i % 20 == 0: ax.plot(X1, X2, pred.eval( feed_dict={X1: x1, X2: x2}, session=sess), 'k', alpha=epoch_i / n_epochs) fig.show() plt.draw() # 如果我们达到了最小值,允许训练退出 if np.abs(prev_training_cost - training_cost) < 0.000001: break prev_training_cost = training_cost
回答:
那么你是训练前馈网络还是循环神经网络?
你在RNN()中写的代码让我想起了简单的神经网络(前馈网络)。然而你的标题说你在研究RNN
你可能会发现这个实现很有趣。和你一样,它生成整数向量并使用RNN进行加法