今天把昨晚的bug调试好了,问题出在nn包中的方法引用错了,其次就是定义初始化之后忘记sess.run一次。下面附上正确代码:
from __future__ import print_function import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import os # 保证session.run能够正常运行 tf.compat.v1.disable_eager_execution() os.environ["CUDA_VISIBLE_DEVICES"] = "0" mnist = input_data.read_data_sets("MNIST_Data", one_hot=True) # 设置训练参数 learning_rate = 0.001 training_step = 10000 batch_size = 128 display_step = 400 # 设置双向循环神经网络参数 num_input = 28 timestep = 28 num_hidden = 128 num_classes = 10 # 构造计算图输入变量 X = tf.compat.v1.placeholder("float32", [None, timestep, num_input]) Y = tf.compat.v1.placeholder("float32", [None, num_classes]) # 设置权重和偏值 weights = { 'out': tf.Variable(tf.compat.v1.random_normal([2*num_hidden, num_classes])) } biases = { 'out': tf.Variable(tf.compat.v1.random_normal([num_classes])) } # 自定义双向循环神经网络函数 def BiRNN(X, weights, biases): x = tf.unstack(X, timestep, 1) lstm_fw_cell = tf.compat.v1.nn.rnn_cell.BasicLSTMCell(num_hidden, forget_bias=1.0) lstm_bw_cell = tf.compat.v1.nn.rnn_cell.BasicLSTMCell(num_hidden, forget_bias=1.0) try: outputs, _, _ = tf.compat.v1.nn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x, dtype=tf.float32) except Exception: outputs = tf.compat.v1.nn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x, dtype=tf.float32) return tf.matmul(outputs[-1], weights['out']) + biases['out'] # 获取神经网络输出层logits,使用softmax激活函数将logits映射成各类取值概率,结果赋值给prediction logits = BiRNN(X, weights, biases) prediction = tf.nn.softmax(logits) # 通过交叉熵构建损失函数,并使用梯度下降法求解,将结果赋值给train_op。 loss_op = tf.reduce_mean(tf.compat.v1.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y)) optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=learning_rate) train_op = optimizer.minimize(loss_op) # 计算训练模型的准确率 correct_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(Y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) # 初始化全部变量 init = tf.compat.v1.global_variables_initializer() # Session with tf.compat.v1.Session() as sess: sess.run(init) # 训练模型 for step in range(1, training_step+1): batch_x, batch_y = mnist.train.next_batch(batch_size) batch_x = batch_x.reshape((batch_size, timestep, num_input)) sess.run(train_op, feed_dict={X: batch_x, Y: batch_y}) if step % display_step == 0 or step == 1: loss, acc = sess.run([loss_op, accuracy], feed_dict={X: batch_x, Y: batch_y}) print("Step"+str(step)+",Minbatch Loss="+"{:.4f}".format(loss)+",Training Accuracy="+"{:.3f}".format(acc)) print("Optimization Finished!") # 设置测试数据长度为128,通过训练模型对测试数据进行预测,打印测试数据的准确率 test_len = 128 test_data = mnist.test.images[:test_len].reshape((-1, timestep, num_input)) test_label = mnist.test.labels[:test_len] print("Test Accuracy:", sess.run(accuracy, feed_dict={X: test_data, Y: test_label}))
这段代码是通过MNIST数据集来实现简单的双向循环神经网络,运行如下
此外今天还调试了一下虚拟机,准备开始写spark的实验报告了,在那之前想重装一下hive,但配置mysql服务的时候忘记了密码,后来在重置密码的过程中发现mysql服务出现了问题,一直无法启动,最后只能把原来的删掉重新装了一遍:
参考博客:https://blog.csdn.net/msmzm/article/details/111498997
这次安装是下载的免安装版,自行配置my.ini文件后通过cmd进行操作的,my.ini文件配置如下:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:mysql-8.0.22-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:mysql-8.0.22-winx64Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
cmd命令:
先切换到安装后的bin目录下之后先执行:mysqld --initialize --console
执行成功后在最后一行(我的已经安装好了,无法重现当时的情况,因此直接使用参考博客内的截图),后是自动生成的初始密码,保存一下,首次登录时要用。
之后执行命令:mysqld install
随后启动服务:net start mysql
登录:mysql -u root -p
登录时会要求你输入密码,输入刚才生成的那个,进入之后直接修改密码,其他教程会让你输入use mysql,我这里输入时提示让我先重置密码。
重置密码命令(假设重置密码为123456):
(1)ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
(2)ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
我这里记得是用第二种。
当提示时证明修改成功。