Tensorflow

#Tensorflow TensorFlow๋Š” ๊ตฌ๊ธ€์—์„œ ์ˆ˜์น˜์—ฐ์‚ฐ์„ ์œ„ํ•ด ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋… node์™€ edge๋กœ ๊ตฌ์„ฑ๋œ graph๋ฅผ ์ด์šฉํ•ด ์ˆ˜์น˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. node๋“ค์€ ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ํ˜•ํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. edge๋Š” ํ•™์Šต๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด๋‹ค. edge๋Š” node์—์„œ ๊ณ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ node๋กœ ์ด๋™์‹œํ‚จ๋‹ค. edge๋Š” ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ์œผ๋ฉฐ(directed), tensor๋ผ ๋ถˆ๋ฆฐ๋‹ค. archive.ics.uci.edu/ml ์—์„œ ํ•™์Šต์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์น˜ python๊ณผ pip๋ฅผ ์„ค์น˜ํ•œ๋‹ค. pip install tensorflow ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. window์—์„œ โ€˜client_load_reporting_filter.hโ€™ ํŒŒ์ผ์„ ์ฐพ์ง€ ๋ชปํ•ด ์„ค์น˜๋ฅผ ๋ชปํ–ˆ๋‹ค๋ฉด, path ๊ฒฝ๋กœ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ด๋‹ค. ์‹คํ–‰์—์„œ regedit์„ ์‹คํ–‰ํ•˜๊ณ , โ€˜HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemโ€™ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ฐพ์•„ ๊ฐ’์„ 1๋กœ ์„ธํŒ…ํ•ด์ค€๋‹ค. ์—ฐ๊ด€ ๋ชจ๋“ˆ ํ•จ๊ป˜ ์“ฐ๋ฉด ํšจ์œจ์ด ์ข‹์€ ๋ชจ๋“ˆ๋“ค matplotlib numpy data = np.loadtxt(FILE_NAME, delimiter=',') : ,๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๋Š” csv ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ž„. ์ˆซ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ keras (tensorflow ์„ค์น˜์‹œ ์ž๋™์„ฑ์น˜๋œ๋‹ค) y_encoded = to_categorical(y_data) : y_data ๋ฅผ one-hot-encoding ํ•˜๋Š” ํ•จ์ˆ˜ (tensorflow.keras.utils.to_categorical) pandas df = pd.read_csv(FILE_NAME) : csv ํŒŒ์ผ์„ ์ฝ์–ด์„œ dataframe์„ ๊ตฌ์„ฑํ•œ๋‹ค. ์ˆซ์ž ๋ฐ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ sklearn ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ e = sklearn.preprocessing.LabelEncoder() e.fit(data) # data ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’ ์ค‘ uniqueํ•œ ๊ฐ’์„ ๋ฝ‘์•„(์ค‘๋ณต ์ œ๊ฑฐ) ํŠน์ • string์— ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธฐ๋Š”(indexing) ํ•จ์ˆ˜ data = e.transform(data) # indexing ๋œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ data๊ฐ’์„ index๋กœ ์น˜ํ™˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์ƒ์ˆ˜ ์„ ์–ธ val = tf.constant(value, dtype=None, shape=None, name='Conts', verify_shape=False) value = ๊ฐ’ dtype : ๋ฐ์ดํ„ฐ ํƒ€์ž…, ex) โ€™tf.float32โ€™, โ€™tf.float64โ€™, โ€™tf.int8โ€™ float(32, 64), int(8, 16, 64),uint(8, 16), string, bool, complex(64, 128 : ๋ณต์†Œ์ˆ˜) shape : ์ฐจ์›, value ํ˜•ํƒœ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์„ค์ • ๋จ, ex) โ€˜[3,3]โ€™ name : ์ƒ์ˆ˜์˜ ์ด๋ฆ„ verify_shape : tensor์˜ shape๋ฅผ ๋ฐ”๊ฟ€์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐฐ์—ด ์ƒ์„ฑ arr = tf.range(5) output : tf.Tensor : shape(5,), dtype=int32, numpy=([0, 1, 2, 3, 4], dtype=int32) ...

<span title='2021-11-27 08:15:42 +0900 KST'>November 27, 2021</span>&nbsp;ยท&nbsp;28 min&nbsp;ยท&nbsp;AswinBlue

Kivy

#kivy Basic concepts Widget ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด widget์€ ๋‹ค๋ฅธ widget์„ treeํ˜•ํƒœ๋กœ ํฌํ•จ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ฒ„ํŠผ, ๋ผ๋ฒจ ๋“ฑ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ๋˜๋Š” Widget์˜ ์ง‘ํ•ฉ ์œ„์น˜๋Š” ์ขŒํ‘œ๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ ์ขŒํ‘œ๋Š” ์ขŒ์ธกํ•˜๋‹จ์ด (0,0)์ด๋‹ค. Layout ํ™”๋ฉด ๊ตฌ์„ฑ์„ ์„ค์ •ํ•œ ์š”์†Œ widget ํ˜น์€ layout์„ ํฌํ•จ ๊ฐ€๋Šฅํ•˜๋‹ค. structure main.py์— python์œผ๋กœ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•œ๋‹ค. class TheLabApp(App): pass TheLabApp().run() main.py์—์„œ ์„ ์–ธํ•œ class โ€˜TheLabAppโ€™ ์—์„œ App์„ ๋บ€ TheLab์„ ๋”ฐ์„œ main.py์™€ ๊ฐ™์€ ๊ฒฝ๋กœ์— โ€˜TheLab.kvโ€™ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. / |-main.py |-TheLab.kv .pyํŒŒ์ผ์—์„œ ์›ํ•˜๋Š” layout class๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ณ , .kvํŒŒ์ผ์—์„œ ๋ฐ”๋กœ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹จ, .kvํŒŒ์ผ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด .pyํŒŒ์ผ์— ์ •์˜๋œ class๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. <EXAMPLE@BoxLayout> ์™€ ๊ฐ™์ด .pyํŒŒ์ผ์˜ class ์„ ์–ธ์„ ์ƒ๋žตํ•˜๊ณ  default ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ///////// .py ///////// class Box(BoxLayout): pass ///////// .kv ///////// <Box>: # .py์—์„œ ์ •์˜๋œ Box๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ GridLayout: # ์ดํ›„๋ถ€ํ„ฐ๋Š” kivy์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋“ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ label: text:"lb" <Box2@BoxLayout>: # .pyํŒŒ์ผ์—์„œ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์‹ซ์„ ๋•Œ ์‚ฌ์šฉ /////////////////////// ex) class ์•ˆ์—์„œ ์†์„ฑ ์„ค์ • :self.orientation = "vertical" ex) kvํŒŒ์ผ์—์„œ ์†์„ฑ ์„ค์ • : orientation: "vertical" <NAME>ํ˜•ํƒœ๋กœ ์„ ์–ธํ•œ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. <Box>: ... <Box2>: Button: ... Box: # ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด ... .kvํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋œ๋‹ค. ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‚ด์šฉ๋“ค์˜ ์†์„ฑ์„ ์ •์˜ํ•˜๊ณ  ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. MainWidget: # ํ™”๋ฉด์— ํ‘œ๊ธฐํ•  ๊ฐ์ฒด(widget, layout, โ€ฆ) : # widget ์ •์˜ Button: # widget ๋‚ด๋ถ€ ํ•ญ๋ชฉ ์„ ์–ธ, kivy์—์„œ ์ง€์›ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ข…๋ฅ˜ text:โ€œAโ€ Button: text:โ€œBโ€ ...

<span title='2021-09-09 18:43:28 +0900 KST'>September 9, 2021</span>&nbsp;ยท&nbsp;5 min&nbsp;ยท&nbsp;AswinBlue

Python ๊ธฐ์ดˆ

Python ๊ธฐ๋ณธ ๋‚ด์žฅ ํ•จ์ˆ˜ ์ž…๋ ฅ ํ•œ์ค„ ๋ฐ›๊ธฐ : a = input() ๋ฐ›์€ ๊ฐ’์€ string ํ˜•ํƒœ์ด๋‹ค. ๋ฐ›์€ ๋‹จ์–ด ๋Š์–ด์„œ ํ•ด์„ : a, b = input().split() split() ํ•จ์ˆ˜ ์•ˆ์˜ ์ธ์ž์— ๋”ฐ๋ผ ๊ตฌ๋ถ„์ž ์„ค์ • ๊ฐ€๋Šฅ. ๋นˆ์นธ์ด๋ฉด ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋Š์–ด์คŒ ๋ฐ›์€ ๋‹จ์–ด ๋Š๊ณ  ์ˆซ์ž๋กœ ๋ณ€ํ™˜ : a, b = map(int, input().split()) int ์™ธ ๋‹ค๋ฅธ ํ˜•ํƒœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ถœ๋ ฅ print() ์™€ sys.stdout.write() ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. sys.stdout.write ์•ˆ์—๋Š” string ํ˜•ํƒœ๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. print ์•ˆ์—๋Š” ์ˆ˜์‹ ๋“ฑ์œผ๋กœ string ๋ฐ byte๋ฅผ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. sys.stdout.buffer.write() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด์„ ์ˆ˜์‹์„ ํ†ตํ•ด ์กฐํ•ฉํ•˜๊ณ  ascii ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค. print() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด prefix๊ฐ€ ๋ถ™์–ด์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ด๋Ÿด ๋•Œ sys.stdout.buffer.write()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ex) sys.stdout.write(b'A'*0x10 + b'B'*0x20 + b'\xaa\ xbb\xcc\xdd\x00\x00\x00\x00') # ๊ฒฐ๊ณผ: AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ sys.stdout.write(b'A'*0x10 + b'B'*0x20 + b'\xaa\ xbb\xcc\xdd\x00\x00\x00\x00โ€™) # ๊ฒฐ๊ณผ: bโ€™AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\xaa\xbb\xcc\xdd\x00\x00\x00\x00โ€™ ``` ...

<span title='2021-09-01 18:49:18 +0900 KST'>September 1, 2021</span>&nbsp;ยท&nbsp;2 min&nbsp;ยท&nbsp;AswinBlue

Jython

Jython Java ํ™˜๊ฒฝ์—์„œ python์„ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜ ์—ญ์œผ๋กœ Jython ํ™˜๊ฒฝ์—์„œ java๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ธฐ๋„ ํ•˜๋‹ค. spring์—์„œ jython์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฌ˜์‚ฌํ•˜๊ฒ ๋‹ค. ์„ค์น˜ pom.xml์— ์˜์กด์„ฑ์„ ์ž‘์„ฑํ•œ๋‹ค. pom์„ ์‚ฌ์šฉํ•˜๋ฉด jython์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€ ๋™์ž‘์ด ์‹คํ–‰๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์™ธ๋ถ€ ๋ชจ๋“ˆ ์‚ฌ์šฉ์—๋Š” ์ œํ•œ์ ์ธ ๋ถ€๋ถ„์ด ์žˆ๊ธฐ์— ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์„ค์น˜๋ฅผ ํ•ด์•ผํ•œ๋‹ค. <!-- https://mvnrepository.com/artifact/org.python/jython --> <dependency> <groupId>org.python</groupId> <artifactId>jython</artifactId> <version>2.7.0</version> </dependency> ์‹คํ–‰ PythonInterpreter ์„ ์„ ์–ธํ•œ๋‹ค. ์ดํ›„ execfile, exec ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ python ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. PythonInterpreter jython; jython.execfile(PYTHON); jython.exec("print(1+1)"); execfile๋กœ ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์˜€๋‹ค๋ฉด ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” execํ•จ์ˆ˜์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

<span title='2021-08-23 19:20:47 +0900 KST'>August 23, 2021</span>&nbsp;ยท&nbsp;1 min&nbsp;ยท&nbsp;AswinBlue

PythonCGI

python CGI CGI๋Š” Common Gateway Interface์˜ ์•ฝ์ž๋‹ค. web application์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋Š” ruby, java, php ๋“ฑ ๋‹ค์–‘ํ•˜์ง€๋งŒ ๋ชจ๋‘ CGI ๊ทœ์•ฝ์„ ๋”ฐ๋ผ web server์™€ ํ†ต์‹ ํ•œ๋‹ค. web server๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ์•ฝ์†๋œ ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ web application์— ์ „๋‹ฌํ•˜์—ฌ ์„œ๋กœ ๊ต๋ฅ˜ํ•œ๋‹ค. apache์—์„œ python์„ ์ด์šฉํ•ด web application์„ ๋งŒ๋“ค์–ด web server์™€ ํ†ต์‹ ํ•ด ๋ณด์ž. $ a2enmod CGI ๋ช…๋ น์œผ๋กœ apache์˜ CGI๋ฅผ ์ผœ ์ฃผ๊ณ , sudo service apache2 restart ๋กœ ์„ค์ • ์ ์šฉ /var/log/apache2/error.log ์•ˆ์— apache ์‹คํ–‰์‹œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ์›น ์„œ๋ฒ„๋Š” ์‘๋‹ต์œผ๋กœ ์›น ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…(ํ—ค๋”)์™€ ํ•จ๊ป˜ ์›น ํŽ˜์ด์ง€๋ฅผ ์ „์†กํ•œ๋‹ค. python CGI๋กœ๋Š” print("content-type:text/html; charset=UTF-8\n") ์™€ ๊ฐ™์ด ํ—ค๋”๋ฅผ ํ‘œ๊ธฐ๋‚ธ๋‹ค. ํ—ค๋”๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ ๋ถ€ํ„ฐ๋Š” body ๋ถ€๋ถ„์ด ์ถœ๋ ฅ๋œ๋‹ค. ํŠน์ • ์ฃผ์†Œ๋กœ Redirection์„ ํ•  ๋•Œ์—๋Š” print("location : index.py?id=title")์„ ์ด์šฉํ•œ๋‹ค. ( โ€˜:โ€™ ์ดํ›„ ๋ถ€ํ„ฐ โ€˜"โ€™ ๊นŒ์ง€๋Š” ์›ํ•˜๋Š”๋Œ€๋กœ ์ž‘์„ฑ) formatting string์—์„œ ํŠน์ • ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ์น˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ ex) '{} {}'.format('one','tow') ex) '{a} {b}'.format(a='hello', b='world') python ํŒŒ์ผ์—์„œ ๋ฌธ์ž์—ด๊ณผ format ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์  html์„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. CGI ๋ชจ๋“ˆ import cgi ๋กœ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•ด ์‚ฌ์šฉํ•œ๋‹ค. form = cgi.FieldStorage() form์€ jQuery์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค. ex) pageId = form['id'].value : page์˜ id๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. HTML ์—ฐ๋™ input ํƒœ๊ทธ์˜ name ์†์„ฑ : input ํƒœ๊ทธ๋ฅผ ํŠน์ • ์ด๋ฆ„์œผ๋กœ CGI์— ์ „๋‹ฌํ•จ ex) ...

<span title='2020-07-02 19:15:21 +0900 KST'>July 2, 2020</span>&nbsp;ยท&nbsp;3 min&nbsp;ยท&nbsp;AswinBlue