寒假学习日报(四十三)

  今天把昨晚的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';

我这里记得是用第二种。

当提示时证明修改成功。

原文地址:https://www.cnblogs.com/20183711PYD/p/14427690.html