You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_layers_embedding.py 3.4 kB

5 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import unittest
  5. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
  6. import tensorlayer as tl
  7. import numpy as np
  8. from tests.utils import CustomTestCase
  9. class Layer_Embed_Test(CustomTestCase):
  10. @classmethod
  11. def setUpClass(cls):
  12. pass
  13. @classmethod
  14. def tearDownClass(cls):
  15. pass
  16. def test_onehot(self):
  17. input = tl.layers.Input([32], dtype=tl.int32)
  18. onehot = tl.layers.OneHot(depth=8, on_value=1, off_value=0, axis=-1)
  19. print(onehot)
  20. tensor = tl.layers.OneHot(depth=8)(input)
  21. self.assertEqual(tensor.get_shape().as_list(), [32, 8])
  22. def test_embed(self):
  23. input = tl.layers.Input([8, 100], dtype=tl.int32)
  24. embed = tl.layers.Embedding(vocabulary_size=1000, embedding_size=50, name='embed')
  25. print(embed)
  26. tensor = embed(input)
  27. self.assertEqual(tensor.get_shape().as_list(), [8, 100, 50])
  28. def test_avg_embed(self):
  29. batch_size = 8
  30. length = 5
  31. input = tl.layers.Input([batch_size, length], dtype=tl.int32)
  32. avgembed = tl.layers.AverageEmbedding(vocabulary_size=1000, embedding_size=50, name='avg')
  33. print(avgembed)
  34. tensor = avgembed(input)
  35. # print(tensor)
  36. self.assertEqual(tensor.get_shape().as_list(), [batch_size, 50])
  37. def test_word2vec_nce(self):
  38. batch_size = 8
  39. embedding_size = 50
  40. inputs = tl.layers.Input([batch_size], dtype=tl.int32)
  41. labels = tl.layers.Input([batch_size, 1], dtype=tl.int32)
  42. emb_net = tl.layers.Word2vecEmbedding(
  43. vocabulary_size=10000,
  44. embedding_size=embedding_size,
  45. num_sampled=100,
  46. activate_nce_loss=True, # the nce loss is activated
  47. nce_loss_args={},
  48. E_init=tl.initializers.random_uniform(minval=-1.0, maxval=1.0),
  49. nce_W_init=tl.initializers.truncated_normal(stddev=float(1.0 / np.sqrt(embedding_size))),
  50. nce_b_init=tl.initializers.constant(value=0.0),
  51. )
  52. print(emb_net)
  53. embed_tensor = emb_net([inputs, labels], use_nce_loss=False)
  54. embed_tensor, embed_nce_loss = emb_net([inputs, labels], use_nce_loss=True)
  55. embed_tensor, embed_nce_loss = emb_net([inputs, labels])
  56. self.assertEqual(embed_tensor.get_shape().as_list(), [batch_size, embedding_size])
  57. def test_word2vec_no_nce(self):
  58. batch_size = 8
  59. embedding_size = 50
  60. inputs = tl.layers.Input([batch_size], dtype=tl.int32)
  61. emb_net = tl.layers.Word2vecEmbedding(
  62. vocabulary_size=10000,
  63. embedding_size=embedding_size,
  64. num_sampled=100,
  65. activate_nce_loss=False,
  66. nce_loss_args={},
  67. E_init=tl.initializers.random_uniform(minval=-1.0, maxval=1.0),
  68. nce_W_init=tl.initializers.truncated_normal(stddev=float(1.0 / np.sqrt(embedding_size))),
  69. nce_b_init=tl.initializers.constant(value=0.0),
  70. )
  71. print(emb_net)
  72. embed_tensor = emb_net(inputs)
  73. embed_tensor = emb_net(inputs, use_nce_loss=False)
  74. try:
  75. embed_tensor = emb_net(inputs, use_nce_loss=True)
  76. except AttributeError as e:
  77. print(e)
  78. self.assertEqual(embed_tensor.get_shape().as_list(), [batch_size, embedding_size])
  79. if __name__ == '__main__':
  80. unittest.main()

TensorLayer3.0 是一款兼容多种深度学习框架为计算后端的深度学习库。计划兼容TensorFlow, Pytorch, MindSpore, Paddle.