TF Constants
ஒரு குறிப்பிட்ட நிலையான மதிப்பினைப் பெற்று இயங்குவதற்கு tf.constant() எனும் operatorபயன்படுகிறது. இது string, int, float, bool போன்ற பல்வேறு வகைகளில் தரவுகளைப் பெற்று இயங்கும் தன்மை உடையது. கீழ்க்கண்ட எடுத்துக்காட்டில் இதன் பல்வேறு தரவு வகைகளைக் காணலாம்.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tensorflow as tf | |
print (tf.constant("hello world!")) | |
print (tf.constant(1)) | |
print (tf.constant(1, tf.int16)) | |
print (tf.constant(1.25)) | |
print (tf.constant([1,2,3])) | |
print (tf.constant([[1,2,3],[4,5,6]])) | |
print (tf.constant([[[1,2,3],[4,5,6]], | |
[[7,8,9],[10,11,12]], | |
[[13,14,15],[16,17,18]]])) | |
print (tf.constant([True, True, False])) | |
print (tf.zeros(10)) | |
print (tf.ones([10, 10])) |
நிரலுக்கான விளக்கம் & வெளியீடு:
1. “ hello world” எனக் கொடுக்கும்போது, அது string வகை டென்சாரை உருவாக்கியுள்ளதைக் காணலாம். dtype என்பது data type-ஐக் குறிக்கும்.
Tensor(“Const:0”, shape=(), dtype=string)
2. எண் 1 எனக் கொடுக்கும்போது, int32 வகை டென்சாரை உருவாக்கும். இதுவே default தரவு வகை ஆகும். இதையே int16 என மாற்ற விரும்பினால், 1 எனக் கொடுக்கும்போதே பக்கத்தில், int16 என அளிக்க வேண்டும்.
Tensor(“Const_1:0”, shape=(), dtype=int32)
Tensor(“Const_2:0”, shape=(), dtype=int16)
3. தசம எண்களைக் கொடுக்கும்போது 1.25, float வகை டென்சாரை உருவாக்கும்.
Tensor(“Const_3:0”, shape=(), dtype=float32)
4. [1,2,3] எனும் list மதிப்பினைக் கொடுக்கும்போது, அதனை ஒரு பரிமாண array-ஆகக் கணக்கில் கொள்ளும். இதன் shape எனும் பண்பின் மதிப்பு காலியாக இல்லாமல், 3 என இருப்பதைக் காணலாம். அதாவது 1d array-ல் 3 columnsஉள்ளதை இது குறிக்கிறது.
Tensor(“Const_4:0”, shape=(3,), dtype=int32)
5. [[1,2,3],[4,5,6]] எனும் இரு பரிமாண array-ஐக் கொடுக்கும்போது, shape பண்பின் மதிப்பு (2,3) என உள்ளதைக் காணலாம். அதாவது கொடுக்கப்பட்ட 2d array-ல் 2 rows மற்றும் ஒவ்வொரு row-விலும் 3 columnsஉள்ளது என்பதை இது குறிக்கிறது.
Tensor(“Const_5:0”, shape=(2, 3), dtype=int32)
6. [[[1,2,3],[4,5,6]] ,
[[7,8,9],[10,11,12]] ,
[[13,14,15],[16,17,18]]] எனும் முப்பரிமாண array-ஐக் கொடுக்கும்போது, shape-ன் மதிப்பு (3,2,3) என உள்ளதைக் காணலாம். முதலில் உள்ள 3 என்பது மூன்று 2d array-ஐக் கொண்டுள்ளது என்பதைக் குறிக்கிறது. அடுத்து உள்ள 2,3 என்பது அத்தகைய 2d array-ல் 2 rows, 3 columns உள்ளது என்பதைக் குறிக்கிறது.
Tensor(“Const_6:0”, shape=(3, 2, 3), dtype=int32)
7. True, False என்பது போன்ற மதிப்புகளைக் கொடுக்கும்போது bool வகை டென்சாரை உருவாக்குவதைக் காணலாம்.
Tensor(“Const_7:0”, shape=(3,), dtype=bool)
8. tf.zeros மற்றும் tf.ones என்பது முறையே பூஜ்ஜியம் மட்டும் மற்றும் 1-ஐ மட்டும் பெற்று விளங்கும் அணிகளை உருவாக்கப் பயன்படுகிறது. இதற்குள் கொடுக்கப்பட்டுள்ள மதிப்புகளைப் பொறுத்து இவை முறையே 10 columns-ஐ மட்டும் பெற்று விளங்கும் 1d array-ஐயும், 10 rows & 10 columns -ஐப் பெற்று விளங்கும் 2d array-ஐயும் கொண்ட டென்சாரை உருவாக்கியுள்ளது.
Tensor(“zeros:0”, shape=(10,), dtype=float32)
Tensor(“ones:0”, shape=(10, 10), dtype=float32)
Tensor properties
ஒரு டென்சார் என்பது அதனுடைய பெயர், வடிவம், தரவுவகை எனும் 3 பண்புகளைக் கொண்டு விளக்கப்படுகிறது.
பெயர் (Name): ஒரு டென்சாரை உருவாக்கும்போதே, நமக்கு வேண்டிய பெயரைக் கொடுத்து உருவாக்கலாம். இல்லையெனில், எந்த operator-ஐப் பயன்படுத்தியுள்ளோமோ அதன் பெயரே டென்சாரின் பெயராக தானாக அமைந்துவிடும். அவ்வாறே ஒரே பெயரை மீண்டும் மீண்டும் பயன்படுத்தும்போதோ, அல்லது பெயரிடாதா ஒரே operator-ஐ மீண்டும் மீண்டும் பயன்படுத்தும்போதோ, அதன் பக்கத்தில் underscore (_) இட்டு முறையே 1,2,3, என வரிசை எண்கள் வெளிப்படுவதைக் காணலாம்.
வடிவம் (Shape): இப்பண்பு பொதுவாக shape=() காலி மதிப்பையே பெற்றிருக்கும். ஆனால் அணிகளைக் குறிப்பிடும்போது மட்டும், அது ஒரு பரிமாணமா, இருபரிமாணமா அல்லது முப்பரிமாணமா என்பதைக் குறிக்கப் பயன்படும். கீழ்க்கண்ட உதாரணத்தில் இப்பண்பினைப் பயன்படுத்தி, ஒரு டென்சாருடைய வடிவ அமைப்பைக் கொண்ட மற்றொரு டென்சார் உருவாக்கப்பட்டுள்ளது. அதாவது d எனும் டென்சாரில் உள்ளது போலவே 3 rows-ஐக் கொண்ட 1-ஐ மட்டும் பெற்று விளங்கும் e அணி இங்கு உருவாக்கப்பட்டுள்ளது. tf.ones() என்பது 1-ஐ மட்டும் பெற்று விளங்கும் சதுர அணியை உருவாக்கும்.. எனவே d.shape[0] என 3 rows-ஐ மட்டும் குறிக்கும் விதமாகக் கொடுத்தால் போதுமானது. அதற்கேற்ப columns-ஐ உருவாக்கி சதுர அணியை உருவாக்கிக் கொள்ளும்.
தரவுவகை (data type): int, float, string, bool போன்ற பல்வேறு தரவு வகைகளில் ஒரு டென்சார் எந்தத் தரவு வகையைச் சார்ந்தது என்பதைக் குறிக்க dtype என்பது பயன்படுகிறது. ஒரு தரவு வகையை மற்றொரு தரவு வகையாக மாற்றுவதற்கு tf.cast() எனும் operator பயன்படுகிறது. கீழ்க்கண்ட உதாரணத்தில் float என்பது int-ஆக மாற்றப்பட்டுள்ளது.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tensorflow as tf | |
a = tf.constant(1) | |
b = tf.constant(2) | |
c = tf.constant(1, name = "value") | |
print (a.name) | |
print (b.name) | |
print (c.name) | |
d = tf.constant([[1,2],[3,4],[5,6]]) | |
e = tf.ones(d.shape[0]) | |
print (a.get_shape()) | |
print (d.get_shape()) | |
print (e.get_shape()) | |
#print (tf.ones(a.shape[0])) | |
c = tf.constant(1.25) | |
print (c.dtype) | |
print (tf.cast(c, dtype=tf.int32).dtype) |
நிரலுக்கான வெளியீடு:
Const:0
Const_1:0
value:0
()
(3, 2)
(3,)
<dtype: ‘float32’>
<dtype: ‘int32’>
TF Operators
டென்சாரில் பல்வேறு ஆப்பரேட்டர்கள் உள்ளன. அவற்றில் சிலவான ஒர் எண்ணின் வர்க்க மூலம் காணுதல், இரு அணிகளின் கூட்டல், பெருக்கல் போன்றவற்றிற்குப் பயன்படும் ஆப்பரேட்டர்கள் கீழே கொடுக்கப்பட்டுள்ளன.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tensorflow as tf | |
a = tf.constant(121.5) | |
b = tf.constant([[1,2],[3,4],[5,6]]) | |
c = tf.constant([[7,8],[9,10],[11,12]]) | |
r1 = tf.sqrt(a) | |
r2 = tf.add(b,c) | |
r3 = tf.multiply(b,c) | |
with tf.Session() as s: | |
print (s.run(r1)) | |
print (s.run(r2)) | |
print (s.run(r3)) |
நிரலுக்கான வெளியீடு:
11.022704
[[ 8 10]
[12 14]
[16 18]]
[[ 7 16]
[27 40]
[55 72]]
TF Variables
ஒரு variable என வரையறுக்கப்பட்ட டென்சாரின் மதிப்புகளை நம்மால் மாற்றி மாற்றி அமைக்க முடியும். நியூரல் நெட்வொர்க்கில் weights, bias போன்ற அளவுருக்களை நாம் மாற்றி மாற்றி அமைக்க வேண்டியிருக்கும். இது போன்ற இடங்களில் இந்த variable-ஐ நாம் பயன்படுத்திக் கொள்ளலாம்.
கீழ்க்கண்ட உதாரணத்தில், a எனும் variable உருவாக்கப்பட்டுள்ளது. இதனை உருவாக்கும்போது அதன் பெயர் (v1) மற்றும் [3,3] வடிவம் கொடுக்கப்பட்டுள்ளது. அதாவது 3 rows மற்றும் 3 columns-ஐக் கொண்ட ஒரு அணி உருவாக்கப்பட்டுள்ளது.. ஒரு session-ஐ உருவாக்கி அதில் a-ஐப் பிரிண்ட் செய்து பார்த்தால், random-ஆக இருக்கும் எண்களைப் பெற்ற அணி வெளிப்படுவதைக் காணலாம். மேலும், tf.global_variables_initializer() -ஐ இயக்குவதற்கு முன்னர் பிரிண்ட் செய்து பார்த்தால், “Attempting to use uninitialized value v1” எனும் தவறு வெளிப்படுவதைக் காணலாம். ஆகவே இந்த function-ஐ இயக்கும்போதுதான் கொடுக்கப்பட்ட variables-அனைத்தும் அதன் துவக்க மதிப்பால் initialize செய்யப்படும். எந்த ஒரு variable-ஐயும் பயன்படுத்துவதற்கு முன்னர் இந்த function-ஐ இயக்குவது மிக மிக முக்கியம்.
அடுத்ததாக b எனும் variable உருவாக்கப்பட்டுள்ளது. இதனை உருவாக்கும்போதே initializer மூலம் அந்த variable-ல் என்ன மதிப்புகள் இருக்க வேண்டும் என நேரடியாகக் கொடுத்து விட்டோம். அதாவது என்ன வடிவத்தில் இருக்க வேண்டும் எனக் கூறுவதற்கு பதிலாக, அந்த அணியையே நேரடியாகக் கொடுத்து விட்டோம். இதனை பிரிண்ட் செய்து பார்த்தால், அந்த அணியின் மதிப்பு வெளிப்படுவதைக் காணலாம்.
கடைசியாக x எனும் variable 1 எனும் துவக்க மதிப்பைப் பெற்று உருவாக்கப்பட்டுள்ளது. பின்னர் session-க்குள் for loop மூலம் 10 சுற்றுகளை உருவாக்கி, ஒவ்வொரு சுற்றிலும் அந்த variable, 2 எனும் constant-ஆல் பெருக்கப்படுகிறது. இவ்வாறு பெருக்கப்பட்டு கிடைத்த மதிப்பே, ஒவ்வொரு சுற்றின் இறுதியிலும், x-ன் மதிப்பாக tf.assign() மூலம் அமைக்கப்படுகிறது. எனவேதான் வெளியீடு 1*2=2, 2*2=4 , 4*2=8, 8*2=16 … என வந்துள்ளது.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tensorflow as tf | |
a = tf.get_variable("v3", [3,3]) | |
b = tf.get_variable("v4", initializer=tf.constant([[3, 3],[4, 4]])) | |
x = tf.Variable(1) | |
y = tf.constant(2) | |
r = tf.assign(x,tf.multiply(x,y)) | |
with tf.Session() as s: | |
#print(s.run(a)) | |
s.run(tf.global_variables_initializer()) | |
print(s.run(a)) | |
print(s.run(b)) | |
for i in range(10): | |
print (s.run(r)) |
நிரலுக்கான வெளியீடு:
[[ 0.71750665 -0.39080024 -0.01946092]
[ 0.94270015 0.61512136 -0.7205548 ]
[ 0.6800127 -0.81497526 0.7290914 ]]
[[3 3]
[4 4]]
2
4
8
16
32
64
128
256
512
1024