最近在学习tensorflow(我用的tendorflow-gpu 1.13),识别手写模糊数字,非常基础的一个代码,我在jupyter里面慢慢学习,写出代码之后,正常运行,copy到pycharm里面直接报错,我就很惊讶。错误提示如下:
InternalError (see above for traceback): Blas GEMM launch failed : a.shape=(100, 784), b.shape=(784, 10), m=100, n=10, k=784
[[node MatMul (defined at D:/python学习之路/Tensorflow/第五章识别图中模糊的手写数字/测试训练数据和加载数据分开执行/main.py:13) ]]
在我的代码中有写tf.reset_default_graph(),每次都会重建一张新图,但是还是报错
令我好生费解,仔细比对代码,没有地方写的不一样呀!!!
解决方法:
无意中关闭jupyter,单独运行pycharm中的文件,就可以正常运行(神奇)
目前这个问题的原因没有百度到,仅供各位参考,如果哪位大佬明白原因,留言回复我这个菜鸡,感激不尽
运行成功截图
附上代码:
识别手写模糊数字
from tensorflow.examples.tutorials.mnist import input_data
import pylab
import tensorflow as tf
# 下载数据
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) # 模糊手写字0-9
# 重建一张新图
tf.reset_default_graph()
x = tf.placeholder(tf.float32, [None, 784]) # 用以存放训练集图片
y = tf.placeholder(tf.float32, [None, 10]) # 用以存放标签
W = tf.Variable(tf.random_normal(([784, 10]))) # 服从正态分布
b = tf.Variable(tf.zeros([10]))
pred = tf.nn.softmax(tf.matmul(x, W) + b)
cost = tf.reduce_mean(-tf.reduce_sum(y * tf.log(pred), reduction_indices=1))
learning_rate = 0.01
# 使用梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
training_epochs = 25 # 整个样本迭代25次
batch_size = 100 # 在训练过程中一次取出100条样本
display_step = 1 # 每训练一次就把具体的中间状态显示出来
saver = tf.train.Saver()
model_path = "log/recognition_numbers.cpkt"
if __name__ == "__main__":
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
# 启动循环开始训练
for epoch in range(training_epochs):
avg_cost = 0 # 记录平均损失cost
total_batch = int(mnist.train.num_examples / batch_size)
# 循环所有数据集
for i in range(total_batch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size) # 读取100个数据
# 运行优化器
_, c = sess.run([optimizer, cost], feed_dict={x: batch_xs, y: batch_ys})
avg_cost += c / total_batch
# 显示训练中的详细信息
if (epoch + 1) % display_step == 0:
print("Epoch:", '%04d' % (epoch + 1), 'cost=', '{:.9f}'.format(avg_cost))
print("Finished!")
# 测试模型
# axis=1的时候,将每一行最大元素所在的索引记录下来,最后返回每一行最大元素所在的索引数组。
# tf.argmax(pred,1),获取one_hot序列1所在位置,也就是这张图片表示的数字(精妙绝伦)
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
# 计算准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # tf.cast格式转换
print("Accurancy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))
# 保存模型
save_path = saver.save(sess, model_path)
print("Model saved in file: %s" % save_path)