Пример #1
0
def test_input_fn(data_dir, params):
    """Test input function for the MNIST dataset.

    Args:
        data_dir: (string) path to the data directory
        params: (dict) contains hyperparameters of the model
    """
    dataset = mnist_dataset.test(data_dir)
    dataset = dataset.batch(params['batch_size'])
    dataset = dataset.prefetch(
        1)  # make sure you always have one batch ready to serve
    return dataset
def main(argv):
    args = parser.parse_args(argv[1:])
    '''创建模型'''
    with open(args.model_config) as f:
        params = json.load(f)
    tf.logging.info("创建模型....")
    config = tf.estimator.RunConfig(model_dir=args.model_dir,
                                    tf_random_seed=100)  # config
    cls = tf.estimator.Estimator(model_fn=my_model,
                                 config=config,
                                 params=params)  # 建立模型
    '''预测得到embeddings'''
    tf.logging.info("预测....")
    predictions = cls.predict(
        input_fn=lambda: test_input_fn(args.data_dir, params))
    embeddings = np.zeros((10000, params['embedding_size']))
    for i, p in enumerate(predictions):
        embeddings[i] = p['embeddings']
    tf.logging.info("embeddings shape: {}".format(embeddings.shape))
    '''获得testset 的label 数据,并保存为metadata.tsv 文件'''
    with tf.Session() as sess:
        # Obtain the test labels
        dataset = mnist_dataset.test(args.data_dir)
        dataset = dataset.map(lambda img, lab: lab)
        dataset = dataset.batch(10000)
        labels_tensor = dataset.make_one_shot_iterator().get_next()
        labels = sess.run(labels_tensor)
    np.savetxt(os.path.join(args.log_dir, 'metadata.tsv'), labels, fmt='%d')
    shutil.copy(args.sprite_filename, args.log_dir)
    '''可视化embeddings'''
    with tf.Session() as sess:
        # 1. Variable
        embedding_var = tf.Variable(embeddings, name="mnist_embeddings")
        #tf.global_variables_initializer().run()  # 不需要

        # 2. 保存到文件中,embeddings.ckpt
        saver = tf.train.Saver()
        sess.run(embedding_var.initializer)
        saver.save(sess, os.path.join(args.log_dir, 'embeddings.ckpt'))

        # 3. 关联metadata.tsv, 和mnist_10k_sprite.png
        summary_writer = tf.summary.FileWriter(args.log_dir)
        config = projector.ProjectorConfig()
        embedding = config.embeddings.add()
        embedding.tensor_name = embedding_var.name
        embedding.metadata_path = 'metadata.tsv'
        embedding.sprite.image_path = 'mnist_10k_sprite.png'
        embedding.sprite.single_image_dim.extend([28, 28])
        projector.visualize_embeddings(summary_writer, config)
Пример #3
0
 def eval_input_fn():
     return dataset.test(FLAGS.data_dir).batch(
         FLAGS.batch_size).make_one_shot_iterator().get_next()
Пример #4
0
 def eval_input_fn():
     return dataset.test(FLAGS.data_dir).batch(FLAGS.batch_size).repeat()
def eval_data():
    data = dataset.test(FLAGS.data_dir)
    data = data.cache()
    data = data.batch(FLAGS.batch_size)
    return data
Пример #6
0
def eval_input_fn():
    ds = mnist_dataset.test('/tmp/mnist')
    ds = ds.batch(32)
    return ds
Пример #7
0
        with tf.GradientTape() as tape:
            y = self.input(x)
            for layer in self.layers:
                y = layer(y, train=train)
            loss = tf.reduce_mean(
                tf.losses.sparse_softmax_cross_entropy(labels=labels,
                                                       logits=y.outputs))
        grads = tape.gradient(loss, self.layers[-1].weights)
        return y, grads, loss

    def update(self, grads):
        self.optimiser.apply_gradients(zip(grads, self.layers[-1].weights))


train_ds = mnist_dataset.train("../data/")
test_ds = mnist_dataset.test("../data/").batch(32)

network = Net()

log_interval = 1000

for epoch in range(3):

    start_time = time.time()

    # Training
    train_ds_shuffle = train_ds.shuffle(60000).batch(32)
    for (batch, (images, labels)) in enumerate(train_ds_shuffle):
        logits, grads, loss = network.forward(images, labels, train=True)

        pred = tf.nn.top_k(logits.outputs).indices[:, 0]