Skip to content

Latest commit

ย 

History

History
64 lines (35 loc) ยท 4.45 KB

File metadata and controls

64 lines (35 loc) ยท 4.45 KB

5.3. Tensorflow๋ฅผ ์‚ฌ์šฉํ•œ ํ•™์Šต

ํ†ต๊ณ„ ๋ฐ ๋‹ค์–‘ํ•œ ์ˆ˜ํ•™ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋Š” ๋จธ์‹ ๋Ÿฌ๋‹์€ ๋งค์šฐ ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ TensorFlow์™€ ๊ฐ™์€ ๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ํŒจํ‚ค์ง€๊ฐ€ ์ƒ๊ฒจ๋‚˜๊ณ  ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์–ด๋ ค์šด ์ž‘์—…์€ ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

ํ…์„œํ”Œ๋กœ์šฐ(TensorFlow)๋Š” ๊ธฐ๊ณ„ ํ•™์Šต๊ณผ ๋”ฅ๋Ÿฌ๋‹์„ ์œ„ํ•ด ๊ตฌ๊ธ€์—์„œ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

TensorFlow๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” Tensors ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…์„œ๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ํ†ตํ•ด ํ‘œํ˜„ํ•  ์ˆ˜์žˆ๋Š” N ์ฐจ์› ๋ฒกํ„ฐ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TensorFlow๋Š” ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ ๊ทธ๋ž˜ํ”„(Data Flow Graph) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ ๊ทธ๋ž˜ํ”„๋ž€ ์ˆ˜ํ•™ ๊ณ„์‚ฐ๊ณผ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ๋…ธ๋“œ(Node)์™€ ์—ฃ์ง€(Edge)๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Directed Graph) ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.

Tensor๋ž€ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•˜๋ฉฐ ๋‹ค์ฐจ์› array, list๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Flow๋ž€ ๊ฒฐ๊ตญ Graph๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋ชจ๋“  ๊ณ„์‚ฐ์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ๊ฐ์˜ ์—ฐ์‚ฐ์„ ์ž˜๊ฒŒ ์ชผ๊ฐœ๊ณ  ์ด๊ฒƒ์„ Graph๋กœ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋‹จ ํ…์„œํ”Œ๋กœ์šฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์šฉ์–ด๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์˜คํผ๋ ˆ์ด์…˜(Operation)

    ๊ทธ๋ž˜ํ”„ ์ƒ์˜ ๋…ธ๋“œ๋Š” ์˜คํผ๋ ˆ์ด์…˜(์ค„์ž„๋ง op)์œผ๋กœ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ์˜คํผ๋ ˆ์ด์…˜์€ ํ•˜๋‚˜ ์ด์ƒ์˜ _ํ…์„œ_๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํผ๋ ˆ์ด์…˜์€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ…์„œ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ Operation(op)๋ž€ ๋™์ž‘์„ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ํ…์„œ(Tensor)

    ๋‚ด๋ถ€์ ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ํ…์„œ๋ฅผ ํ†ตํ•ด ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ํ…์„œ๋Š” ์ผ์ข…์˜ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ธ๋ฐ, ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์˜คํผ๋ ˆ์ด์…˜ ๊ฐ„์—๋Š” ํ…์„œ๋งŒ์ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค

  • ์„ธ์…˜(Session)

    ๊ทธ๋ž˜ํ”„๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ธ์…˜ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜์€ ์˜คํผ๋ ˆ์ด์…˜์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์บก์Šํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋ณ€์ˆ˜(Variables)

    ๋ณ€์ˆ˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ์‹คํ–‰์‹œ, ํŒจ๋Ÿฌ๋ฏธํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฐฑ์‹ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ํ…์„œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฒ„ํผ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Node๋ž€ ์ˆ˜ํ•™์  op์˜ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. Edge๋ž€ Node์™€ Node๋ฅผ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์„ ๋งํ•˜๋Š”๋ฐ, ๊ทธ๋ž˜ํ”„์˜์—์„œ ์—์ง€๋Š” ๊ทธ๋“ค ์‚ฌ์ด์—์„œ ์ „๋‹ฌ๋˜๋Š” ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด (ํ…์„œ๋ผ๊ณ  ํ•จ)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

TensorFlow์—์„œ๋Š” ํ…์„œ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์ค‘์‹ฌ ๋‹จ์œ„ ์ž„์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฃผ์–ด์ง„ ๊ทธ๋ฆผ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ, add๋Š” ๋ง์…ˆ ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค. a์™€ b๋Š” ์ž…๋ ฅ ํ…์„œ์ด๊ณ  c๋Š” ๊ฒฐ๊ณผ ํ…์„œ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์œ ์—ฐํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ API๋กœ ๋ฐ์Šคํฌํ†ฑ, ์„œ๋ฒ„ ๋˜๋Š” ๋ชจ๋ฐ”์ผ ์žฅ์น˜์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ CPU ๋˜๋Š” GPU์— ๊ณ„์‚ฐ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TensorFlow๋Š” ์—ฌ๋Ÿฌ API (Application Programming Interfaces)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Low level API:

  • ์™„๋ฒฝํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ œ์–ด
  • ๊ธฐ๊ณ„ ํ•™์Šต ์—ฐ๊ตฌ์ž์—๊ฒŒ ๊ถŒ์žฅ
  • ๋ชจ๋ธ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TensorFlow Core๋Š” TensorFlow์˜ ์ €์ˆ˜์ค€ API์ž…๋‹ˆ๋‹ค.

High level API:

  • TensorFlow ์ฝ”์–ด ์œ„์— ๊ตฌ์ถ•
  • TensorFlow Core๋ณด๋‹ค ๋ฐฐ์šฐ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต์  ์ธ ์ž‘์—…์„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ„์—๋ณด๋‹ค ์‰ฝ๊ณ  ์ผ๊ด€๋˜๊ฒŒ ๋งŒ๋“ค๊ธฐ
  • tf.contrib.learn์€ ์ƒ์œ„ ๋ ˆ๋ฒจ API์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

TensorFlow๋Š” ๊ณ„์‚ฐ(computation)์„ ๊ทธ๋ž˜ํ”„(graph)๋กœ ํ‘œํ˜„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ(node)๋Š” ์—ฐ์‚ฐ(op, operations์˜ ์ค„์ž„)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์—ฐ์‚ฐ์€ 0๊ฐœ ์ด์ƒ์˜ Tensor๋ฅผ ์ทจํ•ด ์–ด๋–ค ๊ณ„์‚ฐ์„ ํ•œ ๋’ค 0๊ฐœ ์ด์ƒ์˜ Tensor๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Tensor๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TensorFlow์—์„œ ๊ทธ๋ž˜ํ”„๋Š” ๊ณ„์‚ฐ์„ ๊ธฐ์ˆ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒƒ์ด๋“  ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ทธ๋ž˜ํ”„๋ฅผ Session์— ์˜ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. Session์€ CPU๋‚˜ GPU ๊ฐ™์€ Devices์— ๊ทธ๋ž˜ํ”„ ์—ฐ์‚ฐ์„ ์˜ฌ๋ฆฐ ๋’ค ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ์—ฐ์‚ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํ…์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ด ํ…์„œ์˜ ํ˜•ํƒœ๋Š” ํŒŒ์ด์ฌ์—์„œ๋Š” numpy์˜ ndarray ๊ฐ์ฒด, C์™€ C++์—์„œ๋Š” tensor flow::Tensor ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.