Source code for datasets.brain.test_input_fn
import os
import tensorflow as tf
from sacred import Experiment
from shutil import rmtree
from .input_fn import brain3D_input_fn_ingred, brain_input_fn
layers = tf.contrib.layers
[docs]class TestBrainInputFn(tf.test.TestCase):
"""docstring for SerializeTest"""
[docs] @classmethod
def setUpClass(self):
self.ex = Experiment("test_brain3D_input_fn",
ingredients=[brain3D_input_fn_ingred])
self.config_updates = {
"model_dir": "datasets/brain/test_model_dir",
"brain3D_feeder": {
"record_dir": "datasets/brain/test_records",
"record_pattern": "brain_{split}_{idx}.tfrecord",
"samples_per_record": 2,
"batch_size": 1,
"n_epochs": 1
}
}
@self.ex.command
def train(model_dir):
def model_fn(features, labels):
img = features["image"]
with tf.contrib.framework.arg_scope([layers.conv3d],
activation_fn=tf.nn.relu,
kernel_size=4,
stride=4,
padding="SAME"):
conv1 = layers.conv3d(img, num_outputs=16) # 32x32x32
conv2 = layers.conv3d(conv1, num_outputs=32) # 8x8x8
conv3 = layers.conv3d(conv2, num_outputs=64) # 2x2x2
predictions = layers.fully_connected(layers.flatten(conv3),
num_outputs=1,
activation_fn=tf.nn.relu)
predictions = tf.squeeze(predictions)
loss = tf.losses.absolute_difference(labels["age"],
predictions)
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(
loss,
global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(
mode=tf.estimator.ModeKeys.TRAIN,
loss=loss,
train_op=train_op)
estimator = tf.estimator.Estimator(model_fn, model_dir)
estimator.train(brain_input_fn())
self.run_object = self.ex.run("train",
config_updates=self.config_updates)
[docs] @classmethod
def tearDownClass(self):
if os.path.exists(self.config_updates["model_dir"]):
rmtree(self.config_updates["model_dir"])
if os.path.exists(self.config_updates["brain3D_feeder"]["record_dir"]):
rmtree(self.config_updates["brain3D_feeder"]["record_dir"])
if __name__ == '__main__':
tf.test.main()