我正在使用TensorFlow创建一个神经网络。我在 help.py 文件中有一些辅助函数:
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
def read_mnist(folder_path="MNIST_data/"):
return input_data.read_data_sets(folder_path, one_hot=True)
def build_training(y_labels, y_output, learning_rate=0.5):
# Define loss function
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_labels, logits=y_output))
#train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
# Calculate accuracy
correct_prediction = tf.equal(tf.argmax(y_output,1), tf.argmax(y_labels,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
return train_step, accuracy
def train_test_model(mnist, x_input, y_labels, accuracy, train_step, steps=1000, batch=100):
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
for i in range(steps):
input_batch, labels_batch = mnist.train.next_batch(batch)
feed_dict = {x_input: input_batch, y_labels: labels_batch}
if i%100 == 0:
train_accuracy = accuracy.eval(feed_dict=feed_dict)
print("Step %d, training batch accuracy %g"%(i, train_accuracy))
train_step.run(feed_dict=feed_dict)
print("The end of training!")
print("Test accuracy: %g"%accuracy.eval(feed_dict={x_input: mnist.test.images, y_labels: mnist.test.labels}))
然后我尝试在训练网络时使用它。首先,我使用非常简单的 1 输出层:
import help
import tensorflow as tf
import numpy as np
# Read mnist data
mnist = help.read_mnist()
image_size = 28
labels_size = 10
# Input layer - flattened images
x_input = tf.placeholder(tf.float32, [None, image_size*image_size])
y_labels = tf.placeholder(tf.float32, [None, labels_size])
# Layers:
# - Input
# - Output (Dense)
# Output dense layer
y_output = tf.layers.dense(inputs=x_input, units=labels_size)
# Define training
train_step, accuracy = help.build_training(y_labels, y_output)
# Run the training & test
help.train_test_model(mnist, x_input, y_labels, accuracy, train_step)
然后我添加另一个 ReLU 层:
# Hidden Layer
hidden = tf.layers.dense(inputs=x_input, units=hidden_size, activation=tf.nn.relu)
# Output dense layer
y_output = tf.layers.dense(inputs=hidden, units=labels_size)
我两次都收到分段错误错误。我尝试了一些我在网上找到的东西,比如重新排序 numpy 和 tensorflow 导入子句,将 help.py 代码放在与网络架构和训练过程相同的文件中,或者增加 docker 镜像的内存。什么都没用。
有人可以帮忙吗?
我升级到下一个版本的TensorFlow,版本1.2。它解决了所有问题。