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)
def eval_input_fn(): return dataset.test(FLAGS.data_dir).batch( FLAGS.batch_size).make_one_shot_iterator().get_next()
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
def eval_input_fn(): ds = mnist_dataset.test('/tmp/mnist') ds = ds.batch(32) return ds
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]