FiR*_*iTi 12 python neural-network tensorflow
我使用TensorFlow创建了一个具有金字塔结构的隐藏层神经网络.这是代码:
num_classes = 10
image_size = 28
#Read the data
train_dataset, train_labels, valid_dataset, valid_labels, test_dataset, test_labels = OpenDataSets("...")
#Create and convert what is needed.
tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))
tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
tf_valid_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)
#Then I create the NN.
Wh = tf.Variable(tf.truncated_normal([image_size * image_size, image_size * image_size / 2]))
bh = tf.Variable(tf.truncated_normal([image_size * image_size / 2]))
hidden = tf.nn.relu(tf.matmul(tf_train_dataset, Wh) + bh)
Wout = tf.Variable(tf.truncated_normal([image_size * image_size / 2, num_labels]))
bout = tf.Variable(tf.truncated_normal([num_labels]))
logits = tf.nn.relu(tf.matmul(hidden, Wout) + bout)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels))
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
train_prediction = tf.nn.softmax(logits)
Run Code Online (Sandbox Code Playgroud)
现在我训练我的NN:
with tf.Session(graph=graph) as session:
tf.initialize_all_variables().run()
for step in range(1000):
offset = (step * batch_size) % (train_labels.shape[0] - batch_size)
batch_data = train_dataset[offset:(offset + batch_size), :]
batch_labels = train_labels[offset:(offset + batch_size), :]
feed_dict = {tf_train_dataset : batch_data, tf_train_labels : batch_labels}
_, l, predictions = session.run([optimizer, loss, train_prediction], feed_dict=feed_dict)
Run Code Online (Sandbox Code Playgroud)
现在我想在训练后验证并测试我的NN.但我不知道如何创建新的feed_dict并使用session.run来验证/测试.
谢谢你的帮助!
Sud*_*kar 11
首先,您必须创建适当的验证/测试张量函数.对于单层MPL,它涉及嵌套乘法与权重和偏差的加法(以及Relu,因为你在原始模型中有它们).在列车预测下方定义这些
valid_prediction = tf.nn.softmax(
tf.nn.relu(tf.matmul(
tf.nn.relu(tf.matmul(tf_valid_dataset, Wh) + bh)), Wout) + bout)))
test_prediction = tf.nn.softmax(
tf.nn.relu(tf.matmul(
tf.nn.relu(tf.matmul(tf_test_dataset, Wh) + bh)), Wout) + bout)))
Run Code Online (Sandbox Code Playgroud)
这些表达式实际上与logit代码中定义的变量完全相同,仅分别使用tf_valid_dataset和tf_test_dataset.您可以创建中间变量来简化它们.
然后,您必须创建一些验证/测试功能来测试准确性.最简单的方法是测试最可能的预测类(粗略的误分类错误).在图表/会话之外定义它.
def accuracy(predictions, labels):
pred_class = np.argmax(predictions, 1)
true_class = np.argmax(labels, 1)
return (100.0 * np.sum(pred_class == true_class) / predictions.shape[0])
Run Code Online (Sandbox Code Playgroud)
之后,您可以在同一个session/feed_dict中简单地传递此精度函数来计算验证/测试分数.
print 'Validation accuracy: %.1f%%' % accuracy(valid_prediction.eval(), valid_labels)
print 'Test accuracy: %.1f%%' % accuracy(test_prediction.eval(), test_labels)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21452 次 |
| 最近记录: |