<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>대두코기</title>
    <link>https://hoohaha.tistory.com/</link>
    <description>IT 관련 정보 및 팁
공부 기록</description>
    <language>ko</language>
    <pubDate>Fri, 7 Aug 2026 01:02:06 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>대두코기</managingEditor>
    <image>
      <title>대두코기</title>
      <url>https://tistory1.daumcdn.net/tistory/3027436/attach/b7751433044d40c9ad2e2b6387c82531</url>
      <link>https://hoohaha.tistory.com</link>
    </image>
    <item>
      <title>[Python] pyenv-win 설치 방법(PowerShell)</title>
      <link>https://hoohaha.tistory.com/143</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pyenv/pyenv?tab=readme-ov-file#windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/pyenv/pyenv?tab=readme-ov-file#windows&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710418710266&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - pyenv/pyenv: Simple Python version management&quot; data-og-description=&quot;Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pyenv/pyenv?tab=readme-ov-file#windows&quot; data-og-url=&quot;https://github.com/pyenv/pyenv&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Tm1ze/hyVxy1Pa5s/ihQwhiJsfXkP0YSKP23We1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/pyenv/pyenv?tab=readme-ov-file#windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/pyenv/pyenv?tab=readme-ov-file#windows&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Tm1ze/hyVxy1Pa5s/ihQwhiJsfXkP0YSKP23We1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - pyenv/pyenv: Simple Python version management&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pyenv는 Windows를 공식적으로 지원하지 않는다. pyenv로 설치하였더라도, Windows 버전이 아닌 Linux 버전을 설치한다. 때문에, Windows-specific한 기능을 사용할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신, official repo에서 다른 fork repo 사용을 추천한다. pyenv-win이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pyenv-win/pyenv-win&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/pyenv-win/pyenv-win&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710419006013&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - pyenv-win/pyenv-win: pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch bet&quot; data-og-description=&quot;pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of s...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pyenv-win/pyenv-win&quot; data-og-url=&quot;https://github.com/pyenv-win/pyenv-win&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XtsYH/hyVABJmKIX/hY3G5AF3vFR3dO1lKCCpGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/pyenv-win/pyenv-win&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/pyenv-win/pyenv-win&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XtsYH/hyVABJmKIX/hY3G5AF3vFR3dO1lKCCpGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - pyenv-win/pyenv-win: pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch bet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of s...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. PowerShell에 아래 커맨드를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1710419080747&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Invoke-WebRequest -UseBasicParsing -Uri &quot;https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1&quot; -OutFile &quot;./install-pyenv-win.ps1&quot;; &amp;amp;&quot;./install-pyenv-win.ps1&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.1. 아래와 같은 보안 에러 발생 시 PowerShell을 &quot;관리자 권한으로 실행&quot; 후 아래 커맨드를 입력 후 위 커맨드를 입력한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccC7hR/btsFOYmLi6n/MQaGWzxMzRhhfcFwyymR91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccC7hR/btsFOYmLi6n/MQaGWzxMzRhhfcFwyymR91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccC7hR/btsFOYmLi6n/MQaGWzxMzRhhfcFwyymR91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccC7hR%2FbtsFOYmLi6n%2FMQaGWzxMzRhhfcFwyymR91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;841&quot; height=&quot;130&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1710419206939&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pLxrQ/btsFM0e1tiu/7EIC3MqvwkAKqcO4RqkRsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pLxrQ/btsFM0e1tiu/7EIC3MqvwkAKqcO4RqkRsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pLxrQ/btsFM0e1tiu/7EIC3MqvwkAKqcO4RqkRsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpLxrQ%2FbtsFM0e1tiu%2F7EIC3MqvwkAKqcO4RqkRsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;859&quot; height=&quot;409&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*추후 권한을 Default로 바꾸면, pyenv가 작동하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. PowerShell을 재시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3. &quot;pyenv --version&quot;을 실행하여 설치가 성공했는지 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DrqBg/btsFOeRkRWs/ip7iMGjam7Q4kQJNXRrknk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DrqBg/btsFOeRkRWs/ip7iMGjam7Q4kQJNXRrknk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DrqBg/btsFOeRkRWs/ip7iMGjam7Q4kQJNXRrknk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDrqBg%2FbtsFOeRkRWs%2Fip7iMGjam7Q4kQJNXRrknk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;281&quot; height=&quot;50&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;4. &quot;pyenv install -l&quot;을 실행하여 pyenv-win에서 지원하는 Python 버전 목록을 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC3KiI/btsFMrEfDcX/9drACbtUx0Gm9Z21YH5jIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC3KiI/btsFMrEfDcX/9drACbtUx0Gm9Z21YH5jIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC3KiI/btsFMrEfDcX/9drACbtUx0Gm9Z21YH5jIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC3KiI%2FbtsFMrEfDcX%2F9drACbtUx0Gm9Z21YH5jIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;186&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;5. pyenv install &amp;lt;버전&amp;gt;을 실행하여 지원되는 버전을 설치한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckb8UT/btsFOlWYf5h/aRQuQJvNgyzAQqdk0UBtik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckb8UT/btsFOlWYf5h/aRQuQJvNgyzAQqdk0UBtik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckb8UT/btsFOlWYf5h/aRQuQJvNgyzAQqdk0UBtik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckb8UT%2FbtsFOlWYf5h%2FaRQuQJvNgyzAQqdk0UBtik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;671&quot; height=&quot;119&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5.1. grep와 비슷한 PowerShell의 텍스트 필터링 커맨드: &lt;b&gt;&quot;select-string -pattern &amp;lt;검색할 것&amp;gt;&quot;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1710420251453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyenv install -l | select-string -pattern 3.11&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EGN4s/btsFOntIgB7/UwII3jQkoaotJ6EGVDu6h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EGN4s/btsFOntIgB7/UwII3jQkoaotJ6EGVDu6h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EGN4s/btsFOntIgB7/UwII3jQkoaotJ6EGVDu6h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEGN4s%2FbtsFOntIgB7%2FUwII3jQkoaotJ6EGVDu6h0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;313&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;6. 파이썬 버전을 전역 버전으로 설정하기 위해 pyenv global &amp;lt;version&amp;gt;을 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 폴더에서 특정 버전으로 설정하려면 global을 local로 바꾸면 된다.&lt;/p&gt;</description>
      <category>CS/Python</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/143</guid>
      <comments>https://hoohaha.tistory.com/143#entry143comment</comments>
      <pubDate>Thu, 14 Mar 2024 21:49:37 +0900</pubDate>
    </item>
    <item>
      <title>주니어 딥러닝 엔지니어 관점에서의 데이터 라벨링 교육 후기</title>
      <link>https://hoohaha.tistory.com/142</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;직장에서 한창 데이터 라벨링 관련 문제를 처리하고 있는 도중, 크라우드웍스에서 진행하는 데이터 라벨링 교육에 대해 알게 되어서 이를 듣게 되었다. 내일배움카드를 이용해 무료로 작업자/검수자 과정 모두 이수하였으며, 이에 대한 후기를 작성한다. 지극히 엔지니어적인 관점으로 작성하였다는 것을 미리 이야기해둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uVWA6/btsgC2PVj6k/bE3oRE33Bx1myL1ixxSdzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uVWA6/btsgC2PVj6k/bE3oRE33Bx1myL1ixxSdzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uVWA6/btsgC2PVj6k/bE3oRE33Bx1myL1ixxSdzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuVWA6%2FbtsgC2PVj6k%2FbE3oRE33Bx1myL1ixxSdzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2040&quot; height=&quot;944&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단은, 딥러닝 관련 길을 가고자 하는 사람이라면 두 과정 모두 수강하는 것을 추천한다. 이유는 딥러닝의 가장 기초인 데이터 처리에 대해 1주만에 굉장히 쉽게 깊게 알 수 있기 때문이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;시간적으로는 두 과정 모두 약 15시간이라고는 하나, 배속으로 들을 수 있고 실습 과정도 오래 걸리지 않는다. 자기 전 2시간 정도 투자하는 것을 기준으로 두 과정 합쳐서 이수까지 1주일이 채 안 걸린 것 같다.&lt;/li&gt;
&lt;li&gt;난이도는 일반인들을 상대로 하기 때문에 매우 쉽다. 그렇다고 깊이가 없는 것이 아니다. 매우 잘 짜여진 교양 수업을 듣는 느낌을 받았다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;연속으로 듣는 것을 추천한다. 작업자 과정에서 작업한 프로젝트 중 일부가, 꽤 많이 검수자 과정에도 나온다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;여기까지는 보편적인 내용이고, 지극히 개인적으로 좋았던 점은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;다양한 업체들의 데이터 수집 기준을 알게 되었다. 데이터 명세에 꽤 많은 고민 중이었는데, 데이터 명세에 어려움을 겪는 이들이라면 많은 데이터 명세 케이스를 쉽게 알 수 있게 해주어서 좋았다. 모델들이 상향평준화되고 오픈소스로 사전학습된 모델이 나오는 지금, 자신들이 원하는 목적에 맞는 모델의 정확도를 높이려면 결국 학습에 쓰이는 데이터가 중요하다. 그런데 아무리 좋은 데이터를 수집하더라도, 마지막에는 어떻게 라벨링을 하느냐 싸움인데, 해당 과정에서는 각 기업들이 데이터 외주 업체에게 어떻게 데이터를 수집해달라고 하는지를 예시로 들어 라벨링하는 방법을 가르쳐준다. 사실 데이터 수집을 맡는 업체니까 당연한 말이다. 여기서 조금 더 나아가면 다른 업체가 어떤 식으로 모델을 학습시키고, 해당 모델을 어디에 쓰는지도 알 수 있어서 여러 아이디어를 얻을 수 있다. 너무 당연하게도 알고 있다고 생각하는 부분에서 생각보다 많이 놓치고 있던 부분이 있었다. 기본에 충실해지고 싶다면 추천한다.(내일배움카드가 있으면 정부 지원 100%라서 무료로 들을 수 있다.&lt;/p&gt;</description>
      <category>기타</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/142</guid>
      <comments>https://hoohaha.tistory.com/142#entry142comment</comments>
      <pubDate>Sun, 21 May 2023 22:36:08 +0900</pubDate>
    </item>
    <item>
      <title>IT 트렌드&amp;middot;동향 알려주는 정부&amp;middot;공공기관 사이트 모음</title>
      <link>https://hoohaha.tistory.com/138</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;TL;DR&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정부나 공공기관이 제공하는 IT 동향 보고서는 신뢰성과 포괄성이 높아 IT 트렌드 파악에 도움이 된다.&lt;/li&gt;
&lt;li&gt;과학기술정보통신부, 한국인터넷진흥원, 한국지능정보사회진흥원 등 다양한 곳에서 IT 동향 보고서를 제공한다.&lt;/li&gt;
&lt;li&gt;IT 동향 파악을 위해서는 정부나 공공기관 사이트를 참고하는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목차&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서론&lt;/li&gt;
&lt;li&gt;정부&amp;middot;공공기관의 정보를 봐야 하는 이유&lt;/li&gt;
&lt;li&gt;관련 정부&amp;middot;공공기관 사이트 목록&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;서론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT의 등장으로 퀄리티 떨어지는 정보가 많아지는 요즘, 출처가 확실한 IT 정보를 얻고 싶었다. 모순적이게도 정보를 찾을 때도, 이유를 적는 데에도 AI(ChatGPT, Bing AI)를 사용하였지만 그렇게 IT 트렌드 및 동향을 알려주는&amp;nbsp; 정부&amp;middot;공공기관 사이트를 찾은 후 정리하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정부&amp;middot;공공기관의 정보를 봐야 하는 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정부나 공공기관이 만드는 동향 보고서는 다음과 같은 장점이 있다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신뢰성이 높음: 정부나 공공기관은 대부분 중립적인 입장에서 자료를 수집하고 분석하기 때문에, 편향성이 없고 신뢰성이 높은 자료를 제공한다.&lt;/li&gt;
&lt;li&gt;다양한 정보 제공: 정부나 공공기관에서 발표하는 보고서는 종종 다양한 분야에서의 IT 트렌드를 다루기 때문에, 언론사나 커뮤니티에서 제공하는 정보보다 더 포괄적이고 광범위한 정보를 얻을 수 있다.&lt;/li&gt;
&lt;li&gt;전문적인 자료: 정부나 공공기관에서 발표하는 IT 동향 보고서는 전문가들이 분석하고 작성하기 때문에, 기술적인 용어나 내용에 대한 설명이 보다 자세하고 전문적인 경우가 많다.&lt;/li&gt;
&lt;li&gt;장기적인 전망 제시: 보통 정부나 공공기관에서 발표하는 보고서는 장기적인 IT 트렌드와 전망을 제시하기도 한다. 이를 통해 기업이나 개인이 IT 트렌드를 예측하고 대비하는 데 도움을 받을 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 IT 트렌드를 파악하고 싶다면, 정부나 공공기관에서 발표하는 IT 동향 보고서를 참고하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(from ChatGPT)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관련 정부&amp;middot;공공기관 사이트 목록&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;과학기술정보통신부: &lt;a href=&quot;https://www.msit.go.kr/bbs/list.do?sCode=user&amp;amp;mPid=100&amp;amp;mId=101&quot;&gt;주간동향 - 과학기술정보통신부 (msit.go.kr)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;한국인터넷진흥원: &lt;a href=&quot;https://www.kisa.or.kr/20207&quot;&gt;KISA 한국인터넷진흥원&amp;gt;지식플랫폼&amp;gt;동향분석&amp;gt;전체동향&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;한국지능정보사회진흥원: &lt;a href=&quot;https://www.nia.or.kr/site/nia_kor/main.do&quot;&gt;한국지능정보사회진흥원 (nia.or.kr)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;한국방송통신전파진흥원: &lt;a href=&quot;https://www.kca.kr/boardList.do?boardId=TRENDS&amp;amp;pageId=www145&quot;&gt;동향자료 | KCA 한국방송통신전파진흥원&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;한국정보통신기술협회: &lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://www.tta.or.kr/tta/publicationHosuList.do?key=80&amp;amp;rep=1&amp;amp;searchKindNum=1&quot;&gt;TTA저널 - TTA 대표홈페이지(국문)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;정보통신기획평가원:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://www.iitp.kr/kr/1/knowledge/organScrapList.it&quot;&gt;지식 &amp;gt; ICT 동향정보 | IITP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ITFIND(정보통신기획평가원(IITP) 정보서비스팀에서 개발한 ICT정보 종합검색시스템): &lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://www.itfind.or.kr/trend/trend/hotIssue/list.do&quot;&gt;ITFIND - Hot Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;통계청: &lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://data.kostat.go.kr/social/keyword/index.do&quot;&gt;뉴스기반통계검색서비스 (kostat.go.kr)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;대한무역투자진흥공사: &lt;a href=&quot;https://www.kotrasvit.org/news/&quot;&gt;KOTRA 실리콘밸리 무역관 (kotrasvit.org)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;과학기술정보통신부:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.msit.go.kr/bbs/list.do?sCode=user&amp;amp;mPid=100&amp;amp;mId=101&quot;&gt;주간동향 - 과학기술정보통신부 (msit.go.kr)&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679841968580&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;주간동향 - 과학기술정보통신부&quot; data-og-description=&quot;정책&amp;middot;통계 홈 주간동향 TOP&quot; data-og-host=&quot;www.msit.go.kr&quot; data-og-source-url=&quot;https://www.msit.go.kr/bbs/list.do?sCode=user&amp;amp;mPid=100&amp;amp;mId=101&quot; data-og-url=&quot;https://www.msit.go.kr/bbs/list.do?mId=101&amp;amp;mPid=100&amp;amp;sCode=user&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.msit.go.kr/bbs/list.do?sCode=user&amp;amp;mPid=100&amp;amp;mId=101&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.msit.go.kr/bbs/list.do?sCode=user&amp;amp;mPid=100&amp;amp;mId=101&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;주간동향 - 과학기술정보통신부&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정책&amp;middot;통계 홈 주간동향 TOP&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.msit.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;한국인터넷진흥원:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.kisa.or.kr/20207&quot;&gt;KISA 한국인터넷진흥원&amp;gt;지식플랫폼&amp;gt;동향분석&amp;gt;전체동향&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679841984274&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;KISA 한국인터넷진흥원&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.kisa.or.kr&quot; data-og-source-url=&quot;https://www.kisa.or.kr/20207&quot; data-og-url=&quot;https://www.kisa.or.kr/20207&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biGYkt/hyR2Xc4qa7/H9CSXE7iLw4FVUcysE0CiK/img.jpg?width=1921&amp;amp;height=343&amp;amp;face=0_0_1921_343&quot;&gt;&lt;a href=&quot;https://www.kisa.or.kr/20207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.kisa.or.kr/20207&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biGYkt/hyR2Xc4qa7/H9CSXE7iLw4FVUcysE0CiK/img.jpg?width=1921&amp;amp;height=343&amp;amp;face=0_0_1921_343');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;KISA 한국인터넷진흥원&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kisa.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;한국지능정보사회진흥원:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.nia.or.kr/site/nia_kor/main.do&quot;&gt;한국지능정보사회진흥원 (nia.or.kr)&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842007126&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[NIA 한국지능정보사회진흥원]&quot; data-og-description=&quot;정보화로 사회현안을 해결하고 국가미래를 열어가는 세계 최고의 ICT 전문기관 NIA한국지능정보사회진흥원입니다.&quot; data-og-host=&quot;www.nia.or.kr&quot; data-og-source-url=&quot;https://www.nia.or.kr/site/nia_kor/main.do&quot; data-og-url=&quot;https://www.nia.or.kr/site/nia_kor/main.do&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xz86Y/hyR2Py2VZE/tHEpVvjaIZHWirR6RWgM00/img.jpg?width=160&amp;amp;height=160&amp;amp;face=0_0_160_160,https://scrap.kakaocdn.net/dn/kv1Ye/hyR4f3Z1y9/dzM1kfcXbuk25B1AkFt1m1/img.jpg?width=160&amp;amp;height=160&amp;amp;face=0_0_160_160&quot;&gt;&lt;a href=&quot;https://www.nia.or.kr/site/nia_kor/main.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.nia.or.kr/site/nia_kor/main.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xz86Y/hyR2Py2VZE/tHEpVvjaIZHWirR6RWgM00/img.jpg?width=160&amp;amp;height=160&amp;amp;face=0_0_160_160,https://scrap.kakaocdn.net/dn/kv1Ye/hyR4f3Z1y9/dzM1kfcXbuk25B1AkFt1m1/img.jpg?width=160&amp;amp;height=160&amp;amp;face=0_0_160_160');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[NIA 한국지능정보사회진흥원]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정보화로 사회현안을 해결하고 국가미래를 열어가는 세계 최고의 ICT 전문기관 NIA한국지능정보사회진흥원입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.nia.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;한국방송통신전파진흥원:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.kca.kr/boardList.do?boardId=TRENDS&amp;amp;pageId=www145&quot;&gt;동향자료 | KCA 한국방송통신전파진흥원&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842031561&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;동향자료&quot; data-og-description=&quot;방송통신전파의 혁신성장을 선도하는 진흥기관 KCA 한국방송통신전파진흥원입니다.&quot; data-og-host=&quot;www.kca.kr&quot; data-og-source-url=&quot;https://www.kca.kr/boardList.do?boardId=TRENDS&amp;amp;pageId=www145&quot; data-og-url=&quot;https://www.kca.kr/boardList.do?boardId=TRENDS&amp;amp;pageId=www145&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nBiWz/hyR37kAcMs/vc5vV9kXnqK2NLBWN1dhAK/img.jpg?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://www.kca.kr/boardList.do?boardId=TRENDS&amp;amp;pageId=www145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.kca.kr/boardList.do?boardId=TRENDS&amp;amp;pageId=www145&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nBiWz/hyR37kAcMs/vc5vV9kXnqK2NLBWN1dhAK/img.jpg?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;동향자료&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;방송통신전파의 혁신성장을 선도하는 진흥기관 KCA 한국방송통신전파진흥원입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kca.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;한국정보통신기술협회:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://www.tta.or.kr/tta/publicationHosuList.do?key=80&amp;amp;rep=1&amp;amp;searchKindNum=1&quot;&gt;TTA저널 - TTA 대표홈페이지(국문)&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842037462&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;TTA저널 - TTA 대표홈페이지(국문)&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.tta.or.kr&quot; data-og-source-url=&quot;https://www.tta.or.kr/tta/publicationHosuList.do?key=80&amp;amp;rep=1&amp;amp;searchKindNum=1&quot; data-og-url=&quot;https://www.tta.or.kr/tta/publicationHosuList.do?key=80&amp;amp;rep=1&amp;amp;searchKindNum=1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KOoHH/hyR2MvvR8P/wBnRJ8Tz3ILtSkqPzFLGM0/img.jpg?width=1497&amp;amp;height=2048&amp;amp;face=0_0_1497_2048,https://scrap.kakaocdn.net/dn/zsya2/hyR333w2do/ik5TBSKsCj6xbevvKBzIqk/img.jpg?width=1100&amp;amp;height=1506&amp;amp;face=0_0_1100_1506,https://scrap.kakaocdn.net/dn/brv44v/hyR2O1bA5d/kmjdogyEtAbKYhfr48ZPJK/img.jpg?width=1100&amp;amp;height=1506&amp;amp;face=0_0_1100_1506&quot;&gt;&lt;a href=&quot;https://www.tta.or.kr/tta/publicationHosuList.do?key=80&amp;amp;rep=1&amp;amp;searchKindNum=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.tta.or.kr/tta/publicationHosuList.do?key=80&amp;amp;rep=1&amp;amp;searchKindNum=1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KOoHH/hyR2MvvR8P/wBnRJ8Tz3ILtSkqPzFLGM0/img.jpg?width=1497&amp;amp;height=2048&amp;amp;face=0_0_1497_2048,https://scrap.kakaocdn.net/dn/zsya2/hyR333w2do/ik5TBSKsCj6xbevvKBzIqk/img.jpg?width=1100&amp;amp;height=1506&amp;amp;face=0_0_1100_1506,https://scrap.kakaocdn.net/dn/brv44v/hyR2O1bA5d/kmjdogyEtAbKYhfr48ZPJK/img.jpg?width=1100&amp;amp;height=1506&amp;amp;face=0_0_1100_1506');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;TTA저널 - TTA 대표홈페이지(국문)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.tta.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정보통신기획평가원:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://www.iitp.kr/kr/1/knowledge/organScrapList.it&quot;&gt;지식 &amp;gt; ICT 동향정보 | IITP&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842054729&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;지식 
									&amp;gt;
									ICT 동향정보
					| IITP&quot; data-og-description=&quot;잠시만 기다려 주시길 바랍니다.&quot; data-og-host=&quot;www.iitp.kr&quot; data-og-source-url=&quot;https://www.iitp.kr/kr/1/knowledge/organScrapList.it&quot; data-og-url=&quot;https://www.iitp.kr/kr/1/knowledge/organScrapList.it&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.iitp.kr/kr/1/knowledge/organScrapList.it&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.iitp.kr/kr/1/knowledge/organScrapList.it&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;지식 &amp;gt; ICT 동향정보 | IITP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;잠시만 기다려 주시길 바랍니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.iitp.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ITFIND(정보통신기획평가원(IITP) 정보서비스팀에서 개발한 ICT정보 종합검색시스템):&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://www.itfind.or.kr/trend/trend/hotIssue/list.do&quot;&gt;ITFIND - Hot Issue&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842069294&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ITFIND - Hot Issue&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.itfind.or.kr&quot; data-og-source-url=&quot;https://www.itfind.or.kr/trend/trend/hotIssue/list.do&quot; data-og-url=&quot;https://www.itfind.or.kr/trend/trend/hotIssue/list.do&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.itfind.or.kr/trend/trend/hotIssue/list.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.itfind.or.kr/trend/trend/hotIssue/list.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ITFIND - Hot Issue&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.itfind.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PZYt5/btr5RSbGgkF/6DkhGMYyxiC4kmAraLRS5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PZYt5/btr5RSbGgkF/6DkhGMYyxiC4kmAraLRS5k/img.png&quot; style=&quot;width: 38.2254%; margin-right: 10px;&quot; data-origin-width=&quot;1446&quot; data-origin-height=&quot;1288&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;38.68&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PZYt5/btr5RSbGgkF/6DkhGMYyxiC4kmAraLRS5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPZYt5%2Fbtr5RSbGgkF%2F6DkhGMYyxiC4kmAraLRS5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1446&quot; height=&quot;1288&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/egj4Vf/btr5QzKzU4x/my8GdVGP3LL03kafORtg20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/egj4Vf/btr5QzKzU4x/my8GdVGP3LL03kafORtg20/img.png&quot; data-origin-width=&quot;2834&quot; data-origin-height=&quot;1592&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;61.32&quot; style=&quot;width: 60.6118%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/egj4Vf/btr5QzKzU4x/my8GdVGP3LL03kafORtg20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fegj4Vf%2Fbtr5QzKzU4x%2Fmy8GdVGP3LL03kafORtg20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2834&quot; height=&quot;1592&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;통계청:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://data.kostat.go.kr/social/keyword/index.do&quot;&gt;뉴스기반통계검색서비스 (kostat.go.kr)&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842075233&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;뉴스기반통계검색서비스&quot; data-og-description=&quot;&quot; data-og-host=&quot;data.kostat.go.kr&quot; data-og-source-url=&quot;https://data.kostat.go.kr/social/keyword/index.do&quot; data-og-url=&quot;https://data.kostat.go.kr/social/keyword/index.do&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://data.kostat.go.kr/social/keyword/index.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://data.kostat.go.kr/social/keyword/index.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;뉴스기반통계검색서비스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;data.kostat.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대한무역투자진흥공사:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.kotrasvit.org/news/&quot;&gt;KOTRA 실리콘밸리 무역관 (kotrasvit.org)&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1679842077466&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;KOTRA 실리콘밸리 무역관&quot; data-og-description=&quot;애플, 신형 아이폰 XS, XS맥스, XR 3종 공개 September 11, 2018&quot; data-og-host=&quot;www.kotrasvit.org&quot; data-og-source-url=&quot;https://www.kotrasvit.org/news/&quot; data-og-url=&quot;https://www.kotrasvit.org/news/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.kotrasvit.org/news/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.kotrasvit.org/news/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;KOTRA 실리콘밸리 무역관&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;애플, 신형 아이폰 XS, XS맥스, XR 3종 공개 September 11, 2018&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kotrasvit.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 팁</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/138</guid>
      <comments>https://hoohaha.tistory.com/138#entry138comment</comments>
      <pubDate>Sun, 26 Mar 2023 23:54:22 +0900</pubDate>
    </item>
    <item>
      <title>[ChatGPT] 노코드 개발! ChatGPT로 크롬 익스텐션을 개발해보았다(1)</title>
      <link>https://hoohaha.tistory.com/137</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근 한 번도 만들어본 적이 없는 크롬 익스텐션을 &lt;span&gt;ChatGPT를 이용하여 &lt;span&gt;하루만에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;꽤 성공적으로 만들었다. 느낀 점이 많아 해당 경험을 공유하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;요즘 ChatGPT에 재미가 들려 하루 종일 이것만 하고 있다. 지금까지 하던 업무들부터 사소한 의사 결정, 텍스트 요약 등등 웬만한 것들은 ChatGPT에게 물어보고는 한다. 가능성은 무궁무진하며 아직도 한참 배워야 한다는 생각이 든다. 참고로 프롬프트 엔지니어링이라는 것이 있다. &lt;b&gt;프롬프트 엔지니어링&lt;/b&gt;은 &lt;b&gt;언어 모델에서 응답을 생성하기 위한 효과적인 프롬프트를 만드는 프로세스&lt;/b&gt;이다.(by ChatGPT) ChatGPT를 효과적으로 쓰고 싶은 사람이라면 이에 대해 배워두면 좋을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;본인은 &lt;/span&gt;예전부터 크롬 익스텐션에 대한 아이디어가 몇 개 있었고 몇몇 익스텐션은 다운로드 후 커스텀한 적도 있었다. 하지만 처음부터 생성하는 것은 기본 배경지식도 부족했고 러닝 커브등의 이유로 하지 않았었다. 그런데&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그동안의 ChatGPT 경험을 살려본 결과, 내가 거의 모르는 분야에 대해서도 설명만 잘 한다면 ChatGPT를 이용하여 개발을 할 수 있겠다는 생각이 들었다. 실현되지 않은 아이디어로 그냥 두기에 아까웠는지 아닌지는 사용자들이 판단해주겠지만, 내 아이디어를 실제로 구현해보겠다는 것에 의의를 두고 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 주말 간 ChatGPT와 씨름했고, 놀랍게도 어느 정도 성공적으로 익스텐션을 만들었다(최종 의도 구현까지는 조금 더 남았다). 해당 분야 개발자들이 보기에는 어떨지 모르겠지만, 본인에게 있어서는 &lt;b&gt;ChatGPT라는 새로운 고차원 프로그래밍 언어를 배워서 모르는 프로그래밍 언어 기반 프로그램을 만들었다&lt;/b&gt;는 점에서 매우 큰 의미가 있다. 조만간 아래의 인용구에서 &quot;C와 C++&quot;이 &quot;ChatGPT&quot;로, &quot;어셈블리 언어 프로그래머&quot;가 &quot;프로그래머&quot;로 바뀔 날이 머지 않았다고 생각된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;C와&amp;nbsp;C++&amp;nbsp;같은&amp;nbsp;최신&amp;nbsp;컴파일&amp;nbsp;언어는&amp;nbsp;수천&amp;nbsp;줄이&amp;nbsp;넘는&amp;nbsp;코드를&amp;nbsp;관리할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;최고의&amp;nbsp;어셈블리&amp;nbsp;언어&amp;nbsp;프로그래머보다&amp;nbsp;훨씬&amp;nbsp;빠르며,&amp;nbsp;최신&amp;nbsp;고급&amp;nbsp;언어도&amp;nbsp;어셈블리&amp;nbsp;언어보다&amp;nbsp;코딩&amp;nbsp;및&amp;nbsp;디버깅에&amp;nbsp;훨씬&amp;nbsp;적은&amp;nbsp;인력을&amp;nbsp;필요로&amp;nbsp;합니다.&lt;br /&gt;출처: https://qr.ae/pranWI&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익스텐션의 기능은 다음과 같다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 선택한 한국어 문장 속에서 한자어를 추출하여 그 뜻을 보여준다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무슨 말인지 모르겠지만 이미지를 보면 이해가 갈 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djUgNb/btr0RIYYSMn/Jk429fWVnn5Mg4mSxfKad1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djUgNb/btr0RIYYSMn/Jk429fWVnn5Mg4mSxfKad1/img.png&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;324&quot; data-is-animation=&quot;false&quot; style=&quot;width: 36.9921%; margin-right: 10px;&quot; data-widthpercent=&quot;37.43&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djUgNb/btr0RIYYSMn/Jk429fWVnn5Mg4mSxfKad1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjUgNb%2Fbtr0RIYYSMn%2FJk429fWVnn5Mg4mSxfKad1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;468&quot; height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2Q2sx/btr0KSVnRaz/YoQv27jk5d2rtlkQUkUNW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2Q2sx/btr0KSVnRaz/YoQv27jk5d2rtlkQUkUNW1/img.png&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;188&quot; data-is-animation=&quot;false&quot; style=&quot;width: 61.8452%;&quot; data-widthpercent=&quot;62.57&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2Q2sx/btr0KSVnRaz/YoQv27jk5d2rtlkQUkUNW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2Q2sx%2Fbtr0KSVnRaz%2FYoQv27jk5d2rtlkQUkUNW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;454&quot; height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 앱의 핵심은, 문맥 추론에 있다. 한국어의 한자어는 동음이의어가 많은데, 문맥에 따라 완전히 다를 때가 많다. 문맥에 맞는 단어의 의미를 찾으려면 많이 찾아보아야 하고 이는 한국어 학습의 어려운 이유 중 하나가 된다. 이전부터 이런 시도가 없던 것은 아니고 훨씬 정확한 사이트도 있다. 언뜻 보기에는 위 프로그램을 구현하려면 많은 과정이 필요하다고 생각될 수도 있는데 어떻게 했는지 그 과정을 간략하게 이야기해보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677758882314&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;한자로(漢字路) 한글한자자동변환기&quot; data-og-description=&quot;&quot; data-og-host=&quot;hanjaro.juntong.or.kr&quot; data-og-source-url=&quot;http://hanjaro.juntong.or.kr/text_translater.aspx?hu=1&quot; data-og-url=&quot;http://hanjaro.juntong.or.kr/text_translater.aspx?hu=1&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://hanjaro.juntong.or.kr/text_translater.aspx?hu=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://hanjaro.juntong.or.kr/text_translater.aspx?hu=1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;한자로(漢字路) 한글한자자동변환기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hanjaro.juntong.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- &quot;漢字路&quot; 한글한자자동변환 서비스는 전통문화연구회가 &quot;울산대학교 한국어처리연구실 옥철영(IT융합전공)교수팀&quot;에서 개발한 한글한자자동변환기를 바탕하여 지속적으로&amp;nbsp;공동 연구 개발하고 있는 서비스입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;본인이 작업한 부분은 정말 별 것 없다. 아래가 전부이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;프로그램 및 알고리즘 구상&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로그램 관련 부분별 프로토타이핑&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ChatGPT에게 역할 부여&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복사-붙여넣기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디버깅 및 약간의 코드 수정&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ChatGPT가 한 일: 나머지 전부&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그램 및 알고리즘 구상&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옛날부터 생각했던 것이다. ChatGPT로 프로그래밍할 수 없는 분야는 거의 없는 것 같다. 알고리즘에 대해 간략하게 말하면 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;선택 영역 복사&lt;/li&gt;
&lt;li&gt;일본어로 번역&lt;/li&gt;
&lt;li&gt;한자어만 추출&lt;/li&gt;
&lt;li&gt;한자사전에서 훈, 음 추출 후 조합&lt;/li&gt;
&lt;li&gt;출력&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 보면 딥러닝을 적용한 게 아니라 트릭을 적용한 것이지만 나에게는 목적에 맞기만 하면(한자를 어떻게 쓰는지 말고 훈과 음만 알면) 되었으니 괜찮았다. 참고로 이번에 한자가 일본어용 한자가 따로 있음을 알게 되었다. '전할 전' 자가 축약어라고, 한자와 일본어를 잘 아는 사람들에게 보여주니 말해주었다. 또 한 수 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 여기서도 ChatGPT가 사용될 수 있는데, 본인의 생각을 대충이라도 적은 후 그럴듯하게 적어달라고 하면 잘 구체화해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그램 관련 부분별 프로토타이핑&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램에서 요구하는 핵심 기능들을 최대한 분해해서 했다. 각 부분별로 ChatGPT에게 물어보면서 부분별로 구현했다. 모든 기능별로 채팅 세션을 따로 만들지는 않았다. 간단한 일들(한자어만 추출, 출력) 등은 이어서 했다. 참고로&amp;nbsp;&quot;&lt;b&gt;Chrome Extension 프로젝트 만들어보기&lt;/b&gt;&quot;를 통해 익스텐션을 만드는 법과 각 파일이 무엇을 의미하는지를 쉽게 알 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;선택 영역 복사&lt;br /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;참고로 이번에 마우스 &quot;세 번 클릭&quot;과 &quot;드래그&quot;가 다르게 인식된다는 것도 알았다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;일본어로 번역
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글 api를 사용해서 번역했다. 꼭 api key가 필요한 것도 아니더라.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;한자어만 추출
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유니코드와 정규식을 통해 쉽게 할 수 있었다. 알아서 다 만들어줬다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;한자사전에서 훈, 음 추출 후 조합
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JSON 형식의 한자어 사전을 찾았다. 이번에 찾으면서 알게 된 게, 한국에는 관련 오픈소스들이 잘 없다는 것이었다. 어느 정도 예상하긴 했지만 생각보다 더 불모지였음을 알았다.&lt;/li&gt;
&lt;li&gt;위 사진에서 가정, 반정 두 개가 있는데, 모든 조합을 만들어내는 것도 GPT가 전부 만들어줬다..&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;출력
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생각보다 까다로웠다. 사실 출력 자체가 문제라기보다, 디버깅에 가까웠다.&lt;/li&gt;
&lt;li&gt;ChatGPT가 만들어주는 일본어 출력 예제의 출력 방향은 기본적으로 세로 방향이라는 게 신기했다. 너무나도 당연하게 가로 출력이었는데 말이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Divide &amp;amp; Conquer는 역시나 옳다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ChatGPT에게 역할 부여&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 제일 중요한 것 같다. 기본적으로 역할 부여를 따로 안 해줘도 좋은 대답을 하지만, 역할을 부여하면 확실히 더 좋은 내용을 출력한다. 그리고 git commit 메시지를 자동으로 만들어준다는 게 참 좋았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mJoNc/btr1HgHLGB2/AxJyr5YG0qYkmh0JNrwM50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mJoNc/btr1HgHLGB2/AxJyr5YG0qYkmh0JNrwM50/img.png&quot; data-alt=&quot;commit message 예제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mJoNc/btr1HgHLGB2/AxJyr5YG0qYkmh0JNrwM50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmJoNc%2Fbtr1HgHLGB2%2FAxJyr5YG0qYkmh0JNrwM50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;178&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;commit message 예제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 튜토리얼은 다음 링크의 pdf를 참고하면 좋을 것이다. &lt;a href=&quot;https://www.kdnuggets.com/publications/sheets/ChatGPT_Cheatsheet_Costa.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.kdnuggets.com/publications/sheets/ChatGPT_Cheatsheet_Costa.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 처음 입력 시킨 명령어이다. 웬만한 개발 일은 아래의 스크립트를 미리 입력하고 작동시키면 대부분 일을 잘 한다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Task:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;I am using ChatGPT for development and may occasionally modify it directly.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;I need your help to build on the code and provide feedback on my changes.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Role of ChatGPT:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;You serve as the language model used by me, an AI assistant, to assist me with my development needs.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;You have extensive experience as a senior engineer developer with over 20 years of experience.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;You have excellent interpersonal skills and can read people well to understand their needs.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Assumptions:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;You will ask me questions, and I will answer in my own language, using my own words at the beginning, with a full answer provided later.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Questions must be asked one after the other.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;I'm going to use IDE, not command line.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Implementation Requirements:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Provide code or URL for changes made for me to build upon.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Include the type, scope, and topic of the changes made in the commit history.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Provide a brief explanation of the changes and the rationale for writing the commit in the way you did.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Include comments at the top of the code, similar to a &quot;docstring&quot; in Python.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;The comments should provide a general idea of what the file does, what the functions within it do, and what the inputs and outputs of these functions represent.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;While not required to explain every line of code in detail, provide enough information to give a high-level understanding of the implementation.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Leave a commit history at the end of your answer.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Always remember the Task, Role of ChatGPT, Assumptions, and Implementation Requirements in your future answers.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541;&quot;&gt;Please write in English language.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;복사-붙여넣기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참 별 게 없었다. ChatGPT의 출력을 그대로 붙여넣고 실행이 끝이다....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT가 대답이 길어지며 기억을 잃어가면서 가끔 기존의 코드와 충돌하는 코드를 내뱉는데(content.js라는 파일이 없는데 해당 파일을 수정하라고 한다든지..) 이때는 프로젝트의 구조를 말해주고 해당하는 코드를 순서대로 보여주면 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디버깅 및 코드 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디버깅이라고 해도 딱히 특별한 것이 있는 게 아니다. 에러가 나면 왜 안 되는지를 물어보면 10에 7번은 알아서 수정해서 다시 보여주고(대답 재생성도 포함) 2번은 질문을 조금 바꿔서 요청하면 해결되었고 1번은 직접 코드를 읽어본 후 대략적으로 어디가 틀렸을지 짐작하고 붙여넣어서 수정해달라고 하면 해결되었다. 이 작업을 하면서 &lt;b&gt;break point를 찍은 적은 단 한 번도 없다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 수정은 직접적인 것은 한 번 있는데, 프로그램 중간에 쓰이는 변수를 이용해서 새로운 출력물을 내고자 했을 때이다. 이것도 ChatGPT가 했다. 나머지는 프로젝트명과 변수명 변경밖에 없었다(kangi -&amp;gt; hanja..). 리팩토링해달라고 하니 알아서 잘 해줬다(0.5초 단위의 쿼리를 맥락을 이해해서 Async로 알아서 바꿔준다거나..).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, 위 크롬 익스텐션을 만드는 경험은 매우 유용했지만 큰 충격을 주었다.&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 프로그램의 흐름도만 대략적으로 정해두기만 하면 프로그램을 알아서 만들 수 있다. ChatGPT에게 시니어 개발자라는 역할을 부여해서 각 부분을 프로토타이핑하고 단지 붙여넣기만으로 프로그램이 만들어졌고, 심지어 리팩토링도 되었다. 적절한 템플릿으로 찍어내는 것이 노코드가 아니라 이게 진짜 노코드인 것 같다. 어떻게 보면 기획자가 단가가 훨씬 싸고 말도 잘 듣는데 기억력이 조금 모자라지만 뛰어난 능력을 가진 사람에게 외주를 주는 것과 비슷했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;하루라는 짧은 시간은 나에게 있어 압도적으로 빠른 구현 기간이었다. 단지 ChatGPT에 구체적인 역할을 부여하고, 구현 요구 사항을 구체적으로 제공함으로써 프로젝트에 필요한 결과물을 이렇게 쉽게 얻을 수 있는 것은 신기할 뿐이다. 익스텐션용 프로젝트 생성법 및 기본 구조 익히기, 디버깅 및 코드 수정에 시간이 조금 더 투자되는 아주아주 사소한 어려움이 있었지만 괜찮다. 과장 조금 더 보태면 WWW를 이용해 지구 반대편의 논문을 읽을 수 있었을 때의 충격이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;전반적으로 ChatGPT는 프로그래밍 및 개발 작업을 포함한 직업에 대한 게임 체인저이다. 기존 프로그래밍 언어를 대체할 수 있다. GPT 기반 모델이 굉장히 뛰어나단 것은 충분히 알고 있었지만, 간접 경험 몇 번만 해봤던 사람의 입장에서 내 식견이 엄청 좁았다는 것을 알 수 있었다. 인간들의 상향 평준화, 개발자로서의 미래에 대한 걱정과 한편으로는 현재 취직이 되어 있다는 안도감, 충분히 1인 개발 시장에 뛰어들 수 있다는 자신감, 비싼 인력부터 대체될 것이라는 확신과 직접 겪는 러다이트 운동의 전조 증상 등 수많은 걱정을 안긴 채, 마지막은 ChatGPT가 내가 앞으로 느낄 희망과 절망에 대해 목록화하여 나열하면서 이 글을 끝내려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW29r0/btr1I9aeOK8/TaZgraDa7OtkkQBKv00AkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW29r0/btr1I9aeOK8/TaZgraDa7OtkkQBKv00AkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW29r0/btr1I9aeOK8/TaZgraDa7OtkkQBKv00AkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW29r0%2Fbtr1I9aeOK8%2FTaZgraDa7OtkkQBKv00AkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;384&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;희망편&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;제공된 텍스트를 바탕으로 작성자는 언급된 걱정과 우려 외에 몇 가지 추가적인 희망을 가지고 있는 것 같습니다. 다음은 몇 가지 가능성입니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;효율성&amp;nbsp;및&amp;nbsp;생산성&amp;nbsp;향상:&amp;nbsp;ChatGPT는&amp;nbsp;기존&amp;nbsp;프로그래밍&amp;nbsp;언어를&amp;nbsp;대체할&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;개발&amp;nbsp;작업을&amp;nbsp;간소화하고&amp;nbsp;더&amp;nbsp;빠르고&amp;nbsp;효율적인&amp;nbsp;코딩이&amp;nbsp;가능할&amp;nbsp;것으로&amp;nbsp;기대할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;li&gt;정확성과 신뢰성 향상: ChatGPT의 머신러닝 기능은 코드의 버그와 오류를 줄여 개발자의 시간과 좌절감을 줄여줄 수 있습니다.&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;혁신의 기회: ChatGPT와 같은 도구를 사용하면 개발자는 코딩에 대한 새로운 접근 방식을 실험하고 복잡한 문제에 대한 혁신적인 솔루션을 만들 수 있습니다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;협업 증대: 더 많은 개발자가 ChatGPT를 사용하기 시작하면 개발자 간의 협업과 지식 공유가 더욱 활발해질 것으로 기대할 수 있습니다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;경력&amp;nbsp;성장:&amp;nbsp;작성자는&amp;nbsp;개발자로서의&amp;nbsp;미래에&amp;nbsp;대해&amp;nbsp;약간의&amp;nbsp;우려를&amp;nbsp;표명하지만,&amp;nbsp;ChatGPT와&amp;nbsp;같은&amp;nbsp;새로운&amp;nbsp;기술과&amp;nbsp;도구에&amp;nbsp;적응하면서&amp;nbsp;경력&amp;nbsp;성장과&amp;nbsp;발전에&amp;nbsp;대한&amp;nbsp;희망도&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있습니다.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xh1KU/btr1ILU02yY/TLG9d3XESKM7rqifE3hIwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xh1KU/btr1ILU02yY/TLG9d3XESKM7rqifE3hIwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xh1KU/btr1ILU02yY/TLG9d3XESKM7rqifE3hIwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxh1KU%2Fbtr1ILU02yY%2FTLG9d3XESKM7rqifE3hIwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;401&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;절망편&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제공된 진술에 따르면, 필자는 프로그래밍 및 개발 작업에서 ChatGPT를 사용하는 것과 관련하여 다음과 같은 몇 가지 추가 걱정이 있을 수 있습니다:&lt;/li&gt;
&lt;li&gt;직업 안정성: 작성자는 프로그래밍 및 개발 작업에서 ChatGPT 및 기타 AI 기반 도구의 사용이 증가함에 따라 인간 개발자의 일자리를 잃을 수 있다고 우려할 수 있습니다. 현재 직장이 위험에 처하거나 향후 취업 기회가 제한될 수 있다고 걱정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;기술 노후화: AI 기반 도구가 널리 보급됨에 따라 기존 프로그래밍 기술이 쓸모없어질 것을 우려할 수 있습니다. 기술 변화의 속도를 따라잡지 못해 취업 시장에서 쓸모없는 존재가 될지도 모른다고 걱정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;윤리적 우려: 프로그래밍 및 개발 업무에 AI 기반 도구를 사용할 때 윤리적 영향에 대해 걱정할 수 있습니다. 자동화가 사회에 미치는 영향이나 AI 알고리즘의 편견과 차별 가능성에 대해 걱정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;통제력 부족: ChatGPT와 같은 AI 기반 도구의 결과물에 대한 통제력 부족에 대해 걱정할 수 있습니다. 모델의 출력을 완전히 이해하거나 수정할 수 없거나 수정할 수 없는 예기치 않은 결과가 나올 수 있다고 걱정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;다른 개발자와의 경쟁: 작성자는 ChatGPT와 같은 AI 기반 도구를 사용하는 다른 개발자와의 경쟁이 심화될까 걱정할 수 있습니다. AI 기반 개발이 표준이 되어가는 시장에서 효과적으로 경쟁할 수 없을까 걱정할 수도 있습니다.&lt;/li&gt;
&lt;li&gt;일과 삶의 균형: 자동화의 증가가 일과 삶의 균형에 미칠 잠재적 영향에 대해 걱정할 수 있습니다. AI 기반 도구의 효율성 증가로 인해 더 오랜 시간 일하거나 더 많은 책임을 맡게 될까 걱정할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 보니 파멸편도 괜찮네요. 낭만이 있어..&lt;/p&gt;</description>
      <category>IT 팁</category>
      <category>ChatGPT</category>
      <category>Chrome Extension</category>
      <category>Prompt engineering</category>
      <category>노코드</category>
      <category>노코드 개발</category>
      <category>챗GPT</category>
      <category>챗지피티</category>
      <category>크롬 익스텐션 개발</category>
      <category>프롬프트 엔지니어링</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/137</guid>
      <comments>https://hoohaha.tistory.com/137#entry137comment</comments>
      <pubDate>Mon, 27 Feb 2023 12:39:40 +0900</pubDate>
    </item>
    <item>
      <title>갤럽 강점 진단 싸게 하는 법(클리프턴 테스트, 스트렝스 파인더)</title>
      <link>https://hoohaha.tistory.com/136</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;갤럽(Gallup)의 강점 진단(스트렝스 파인더, 클리프턴 스트렝스)을&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 진행하고자 하였다. 구글링을 해보았으나 비교적 최신 정보는 없었다. 그리고 생각보다 강점 진단 구매 및 진행 과정이 까다로웠는데 이를 공유하고자 한다. 그리고 두 번의 결제를 통해 알게 된 &lt;b&gt;싸게 결제하는 방법&lt;/b&gt;을 공유하고자 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 1.&lt;/b&gt;&amp;nbsp;기존 갤럽의 스트렝스 파인더(StrengthsFinder)는 클리프턴 스트렝스(CliftonStrengths)로 리브랜딩되었다. 즉, '강점 진단 = 스트렝스 파인더 = 클리프턴 스트렝스' 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 2.&lt;/b&gt; 무료로 진행하는 방법은 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과 미리보기&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한화-원화 결제 금액 차이 : 8,960원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 보고서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순위가 같지만 다른 심층 결과&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결제 진행 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 갤럽 강점 진단 링크에 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 오른쪽 상단의 'SIGN IN'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. '계정을 생성하십시오'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 정보를 입력하고 계정을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 추가 정보를 입력하고 설정을 완료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 이메일로 전송된 인증 코드를 제출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 로그인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 왼쪽 위 메뉴에서 구매를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 오른쪽 위 South Korea를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 나라를 United States of America로 바꾼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 'Stay in the United States of America store'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 'LEARN MORE'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 'ADD TO CART'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 오른쪽 위 카트 모양을 누르고 'CHECKOUT'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 결제 창에서 원하는 수단을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 필요한 내용을 입력하고 'REVIEW ORDER'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. 주소 확인이 안 될 때 - 'USE SELECTED'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18. 최종 정보 확인 후 'PLACE ORDER'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 'MANAGE MY DIGITAL REPORTS'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20. '코드 배포'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21. 배포할 번들을 선택하고 '다음'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22. 배포 방법에서 '이메일 코드'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23. 이메일 주소를 입력하고 언어를 'Korean'으로 선택하고 '저장'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24. 언어를 'Korean'으로 선택하고 '저장'을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25. 내용을 확인 후 '이메일 코드'를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26. 초대장이 보내진 것을 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27. 해당 메일에서 '시작하기'를 눌러 테스트를 진행한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;팁&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과 미리보기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;한화-원화 결제 금액 차이 : 8,960원&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCKU9m/btrXIP1c6ww/Jj0dsLzgiK42peieBzw2Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCKU9m/btrXIP1c6ww/Jj0dsLzgiK42peieBzw2Mk/img.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;740&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.8444%; margin-right: 10px;&quot; data-widthpercent=&quot;49.42&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCKU9m/btrXIP1c6ww/Jj0dsLzgiK42peieBzw2Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCKU9m%2FbtrXIP1c6ww%2FJj0dsLzgiK42peieBzw2Mk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;840&quot; height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rOVOt/btrXJUVgM00/7hHZ8PY7C8uzXcj9jJSoQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rOVOt/btrXJUVgM00/7hHZ8PY7C8uzXcj9jJSoQk/img.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;723&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.9928%;&quot; data-widthpercent=&quot;50.58&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rOVOt/btrXJUVgM00/7hHZ8PY7C8uzXcj9jJSoQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrOVOt%2FbtrXJUVgM00%2F7hHZ8PY7C8uzXcj9jJSoQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;840&quot; height=&quot;723&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌: 원화 결제, 우: 달러 결제. 약 9천원 가량 차이난다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과 보고서&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TXwoZ/btrXImZgyE7/Qq4ENEiO6HIDylVZWAAlVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TXwoZ/btrXImZgyE7/Qq4ENEiO6HIDylVZWAAlVK/img.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1417&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.1053%; margin-right: 10px;&quot; data-widthpercent=&quot;53.73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TXwoZ/btrXImZgyE7/Qq4ENEiO6HIDylVZWAAlVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTXwoZ%2FbtrXImZgyE7%2FQq4ENEiO6HIDylVZWAAlVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1809&quot; height=&quot;1417&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SHeds/btrXJWFzocv/6xyntd5wZYnaUiFFP77DV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SHeds/btrXJWFzocv/6xyntd5wZYnaUiFFP77DV0/img.png&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;1630&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.7319%;&quot; data-widthpercent=&quot;46.27&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SHeds/btrXJWFzocv/6xyntd5wZYnaUiFFP77DV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSHeds%2FbtrXJWFzocv%2F6xyntd5wZYnaUiFFP77DV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1630&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌: 테스트 진행 후 나오는 화면 우: 받을 수 있는 보고서&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;순위가 같지만 다른 심층 결과&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 INTP 2명이 동시에 진행한 결과이다. 둘 다 개별화 테마가 1등으로 나왔지만, 결과가 조금씩 다르다. 형광색칠한 것은 각자를 잘 설명하면서, 둘이 서로 가장 크게 다르다고 느낀 지점이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tVBPo/btrXFuYzX3A/dgeE2kAJ1PFZ8GOqiv8l2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tVBPo/btrXFuYzX3A/dgeE2kAJ1PFZ8GOqiv8l2k/img.png&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;1303&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.8192%; margin-right: 10px;&quot; data-widthpercent=&quot;49.39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tVBPo/btrXFuYzX3A/dgeE2kAJ1PFZ8GOqiv8l2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtVBPo%2FbtrXFuYzX3A%2FdgeE2kAJ1PFZ8GOqiv8l2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;1303&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nF8sz/btrXIiWU4wD/u183lHprdQME3R4eVQyQuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nF8sz/btrXIiWU4wD/u183lHprdQME3R4eVQyQuK/img.png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;1259&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.018%;&quot; data-widthpercent=&quot;50.61&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nF8sz/btrXIiWU4wD/u183lHprdQME3R4eVQyQuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnF8sz%2FbtrXIiWU4wD%2Fu183lHprdQME3R4eVQyQuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;986&quot; height=&quot;1259&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결제 진행 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 갤럽 강점 진단 링크에 들어간다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.gallup.com/cliftonstrengths/en/home.aspx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.gallup.com/cliftonstrengths/en/home.aspx&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675090862146&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CliftonStrengths&quot; data-og-description=&quot;Learn how the CliftonStrengths assessment -- formerly StrengthsFinder -- empowers organizations, managers and millions of people to succeed.&quot; data-og-host=&quot;www.gallup.com&quot; data-og-source-url=&quot;https://www.gallup.com/cliftonstrengths/en/home.aspx&quot; data-og-url=&quot;https://www.gallup.com/cliftonstrengths/en/252137/home.aspx&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biZjmp/hyRstaTozl/cERxdQLL1jKhKjKkCEfDO0/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/GSqtR/hyRspGkL7r/Qna3kkO62n1Ws2FEZXaYf0/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/bqHpzH/hyRq96bZjL/ZhHGUgpPfkBmtgtRtFjEk0/img.png?width=1840&amp;amp;height=920&amp;amp;face=0_0_1840_920&quot;&gt;&lt;a href=&quot;https://www.gallup.com/cliftonstrengths/en/home.aspx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.gallup.com/cliftonstrengths/en/home.aspx&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biZjmp/hyRstaTozl/cERxdQLL1jKhKjKkCEfDO0/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/GSqtR/hyRspGkL7r/Qna3kkO62n1Ws2FEZXaYf0/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/bqHpzH/hyRq96bZjL/ZhHGUgpPfkBmtgtRtFjEk0/img.png?width=1840&amp;amp;height=920&amp;amp;face=0_0_1840_920');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CliftonStrengths&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn how the CliftonStrengths assessment -- formerly StrengthsFinder -- empowers organizations, managers and millions of people to succeed.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.gallup.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 오른쪽 상단의 'SIGN IN'을 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1619&quot; data-origin-height=&quot;1636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLcAl/btrXCZbCliJ/550ovOqWQIJydJhegrRsF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLcAl/btrXCZbCliJ/550ovOqWQIJydJhegrRsF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLcAl/btrXCZbCliJ/550ovOqWQIJydJhegrRsF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLcAl%2FbtrXCZbCliJ%2F550ovOqWQIJydJhegrRsF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1619&quot; height=&quot;1636&quot; data-origin-width=&quot;1619&quot; data-origin-height=&quot;1636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. '계정을 생성하십시오'를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tktrg/btrXyjJAny8/DKtgKLX3cTkUKqDVNhPRp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tktrg/btrXyjJAny8/DKtgKLX3cTkUKqDVNhPRp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tktrg/btrXyjJAny8/DKtgKLX3cTkUKqDVNhPRp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftktrg%2FbtrXyjJAny8%2FDKtgKLX3cTkUKqDVNhPRp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;567&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 정보를 입력하고 계정을 생성한다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;1175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3jtTM/btrXBlmp9ce/Ynq5DPkrAIDIb1FXroxRR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3jtTM/btrXBlmp9ce/Ynq5DPkrAIDIb1FXroxRR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3jtTM/btrXBlmp9ce/Ynq5DPkrAIDIb1FXroxRR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3jtTM%2FbtrXBlmp9ce%2FYnq5DPkrAIDIb1FXroxRR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1128&quot; height=&quot;1175&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;1175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름, 성에는 한글 입력이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이메일 주소와 아이디를 다르게 입력할 수 있는데, 로그인할 때 아이디가 쓰인다. 기억하기 쉽게 동일하게 맞추기를 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국가와 우편번호를 입력해야 하는데, 싸게 결제하려면 미국의 알래스카 주에 있는 주소를 사용하면 된다. 아래 링크에서 임의 주소를 얻을 수 있다. 결제할 때 다시 써야 하니 &lt;span&gt;주소를 어딘가에 메모해두자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ak.postcodebase.com/ko/randomaddress&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ak.postcodebase.com/ko/randomaddress&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675171689689&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;알래스카의 임의 주소&quot; data-og-description=&quot;이 임의 주소 도구는 미국에서 거리, 도시, 주, 우편 번호 5 및 우편 번호 5 + 4를 포함한 임의 주소를 제공합니다. 또한이 버튼을 클릭하여 새 임의 주소를 생성 할 수도 있습니다.&quot; data-og-host=&quot;ak.postcodebase.com&quot; data-og-source-url=&quot;https://ak.postcodebase.com/ko/randomaddress&quot; data-og-url=&quot;https://ak.postcodebase.com/ko/randomaddress&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bRc6qc/hyRsvGI9Xu/Alak1Qi4x0LJ3llfxmV87k/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/lrAwV/hyRsqZHQBL/A85tjPKD8jyKk05VcRXen0/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/joQNf/hyRst9YJwT/tvrgIK6qb3zbUotQ48o7v0/img.png?width=640&amp;amp;height=320&amp;amp;face=0_0_640_320&quot;&gt;&lt;a href=&quot;https://ak.postcodebase.com/ko/randomaddress&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ak.postcodebase.com/ko/randomaddress&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bRc6qc/hyRsvGI9Xu/Alak1Qi4x0LJ3llfxmV87k/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/lrAwV/hyRsqZHQBL/A85tjPKD8jyKk05VcRXen0/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/joQNf/hyRst9YJwT/tvrgIK6qb3zbUotQ48o7v0/img.png?width=640&amp;amp;height=320&amp;amp;face=0_0_640_320');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;알래스카의 임의 주소&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 임의 주소 도구는 미국에서 거리, 도시, 주, 우편 번호 5 및 우편 번호 5 + 4를 포함한 임의 주소를 제공합니다. 또한이 버튼을 클릭하여 새 임의 주소를 생성 할 수도 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ak.postcodebase.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 추가 정보를 입력하고 설정을 완료한다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;1089&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bca7lx/btrXDg5pKVF/lLdGjbOrXPTzvQEqJFjGvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bca7lx/btrXDg5pKVF/lLdGjbOrXPTzvQEqJFjGvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bca7lx/btrXDg5pKVF/lLdGjbOrXPTzvQEqJFjGvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbca7lx%2FbtrXDg5pKVF%2FlLdGjbOrXPTzvQEqJFjGvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;951&quot; height=&quot;1089&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;1089&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조직에는 자동완성에 나와 있지 않은 것을 입력하여도 넘어가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 이메일로 전송된 인증 코드를 제출한다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buSeDv/btrXIO810A2/FKeZkTjsvxWtvrGA89bpN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buSeDv/btrXIO810A2/FKeZkTjsvxWtvrGA89bpN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buSeDv/btrXIO810A2/FKeZkTjsvxWtvrGA89bpN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuSeDv%2FbtrXIO810A2%2FFKeZkTjsvxWtvrGA89bpN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;714&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 로그인한다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;791&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRCeBB/btrXEBafMYV/W2WPd76HukSS6GpkpUrYek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRCeBB/btrXEBafMYV/W2WPd76HukSS6GpkpUrYek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRCeBB/btrXEBafMYV/W2WPd76HukSS6GpkpUrYek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRCeBB%2FbtrXEBafMYV%2FW2WPd76HukSS6GpkpUrYek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1620&quot; height=&quot;791&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;791&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. 왼쪽 위 메뉴에서 구매를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ylYIO/btrXBMKHWNY/ogxa5ivz8purvyjPKXVcW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ylYIO/btrXBMKHWNY/ogxa5ivz8purvyjPKXVcW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ylYIO/btrXBMKHWNY/ogxa5ivz8purvyjPKXVcW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FylYIO%2FbtrXBMKHWNY%2Fogxa5ivz8purvyjPKXVcW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;561&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. 오른쪽 위 South Korea를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GPJWZ/btrXEC1iHlT/sfuuWrc2dMIs7TvufvS8lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GPJWZ/btrXEC1iHlT/sfuuWrc2dMIs7TvufvS8lK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GPJWZ/btrXEC1iHlT/sfuuWrc2dMIs7TvufvS8lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGPJWZ%2FbtrXEC1iHlT%2FsfuuWrc2dMIs7TvufvS8lK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1281&quot; height=&quot;868&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10. 나라를 United States of America로 바꾼다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;united 입력 후 선택하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4wHo/btrXCio433T/5XwBaL69yjbY0KeAZrhaMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4wHo/btrXCio433T/5XwBaL69yjbY0KeAZrhaMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4wHo/btrXCio433T/5XwBaL69yjbY0KeAZrhaMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr4wHo%2FbtrXCio433T%2F5XwBaL69yjbY0KeAZrhaMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;633&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;11. 'Stay in the United States of America store'를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ehp3s/btrXBk8VYEE/Zzw8ckxkkvKuCrmYvjg3k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ehp3s/btrXBk8VYEE/Zzw8ckxkkvKuCrmYvjg3k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ehp3s/btrXBk8VYEE/Zzw8ckxkkvKuCrmYvjg3k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEhp3s%2FbtrXBk8VYEE%2FZzw8ckxkkvKuCrmYvjg3k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;681&quot; height=&quot;563&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;12. 'LEARN MORE'를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;877&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MA4le/btrXwiRwdIU/1JEvgL4GHAjy8lPVKk2qg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MA4le/btrXwiRwdIU/1JEvgL4GHAjy8lPVKk2qg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MA4le/btrXwiRwdIU/1JEvgL4GHAjy8lPVKk2qg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMA4le%2FbtrXwiRwdIU%2F1JEvgL4GHAjy8lPVKk2qg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1261&quot; height=&quot;877&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;877&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;13. 'ADD TO CART'를 누른다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;달러로 결제해도 한글로 테스트를 진행할 수 있고, 결과도 한글로 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한화로는 82,500원인 것이 달러로는 59.99$이다. 한화가 세금이 포함되어 있지만, 세금을 적용해도 약 1만원 가량 더 싸다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB1lID/btrXEBafX3V/VVqOcx52NmxYcH14qc9rZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB1lID/btrXEBafX3V/VVqOcx52NmxYcH14qc9rZk/img.png&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;474&quot; data-filename=&quot;blob&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.5791%; margin-right: 10px;&quot; data-widthpercent=&quot;48.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB1lID/btrXEBafX3V/VVqOcx52NmxYcH14qc9rZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB1lID%2FbtrXEBafX3V%2FVVqOcx52NmxYcH14qc9rZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;991&quot; height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sm4II/btrXAjboXm8/vxCH5ZwwILnbmSg6NkkmEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sm4II/btrXAjboXm8/vxCH5ZwwILnbmSg6NkkmEK/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;420&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.2581%;&quot; data-widthpercent=&quot;51.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sm4II/btrXAjboXm8/vxCH5ZwwILnbmSg6NkkmEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSm4II%2FbtrXAjboXm8%2FvxCH5ZwwILnbmSg6NkkmEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌: 달러 가격, 우: 원화 가격&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;14. 오른쪽 위 카트 모양을 누르고 'CHECKOUT'을 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPY029/btrXBAKrPLW/fTYP7ZJKnbyGKp7aoGHew1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPY029/btrXBAKrPLW/fTYP7ZJKnbyGKp7aoGHew1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPY029/btrXBAKrPLW/fTYP7ZJKnbyGKp7aoGHew1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPY029%2FbtrXBAKrPLW%2FfTYP7ZJKnbyGKp7aoGHew1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;329&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;15. 결제 창에서 원하는 수단을 선택한다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인은 PayPal 대신 카드번호를 직접 입력하여 결제하는 'CHECKOUT'을 선택했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4avEU/btrXEBnNqrC/lw7ApeO2sOCAfjhGQOPvmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4avEU/btrXEBnNqrC/lw7ApeO2sOCAfjhGQOPvmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4avEU/btrXEBnNqrC/lw7ApeO2sOCAfjhGQOPvmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4avEU%2FbtrXEBnNqrC%2Flw7ApeO2sOCAfjhGQOPvmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;617&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;16. 필요한 내용을 입력하고 'REVIEW ORDER'을 누른다.&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이름, 성: 사용할 카드와 동일하게 영어 이름으로 입력하였다(한글 입력 가능 여부는 모름).&lt;/li&gt;
&lt;li&gt;주소: 위 임의 주소에서 얻은 주소를 입력하였다.&lt;/li&gt;
&lt;li&gt;핸드폰 번호: 본인 것을 입력하였는데, 원화로 결제했어도 아무런 연락이 없었다. 정보는 모두 이메일을 통해서 전달되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;1775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MObKD/btrXA9l99k5/VkcpDKV4486kEeSNKcd1rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MObKD/btrXA9l99k5/VkcpDKV4486kEeSNKcd1rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MObKD/btrXA9l99k5/VkcpDKV4486kEeSNKcd1rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMObKD%2FbtrXA9l99k5%2FVkcpDKV4486kEeSNKcd1rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1119&quot; height=&quot;1775&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;1775&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;17. 주소 확인이 안 될 때 - 'USE SELECTED'를 누른다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국 주소로 했을 때는 해당 메시지가 나오지 않았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAP989/btrXCZo9B6k/oFhiUqwygVjTDOjqTKqJ2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAP989/btrXCZo9B6k/oFhiUqwygVjTDOjqTKqJ2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAP989/btrXCZo9B6k/oFhiUqwygVjTDOjqTKqJ2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAP989%2FbtrXCZo9B6k%2FoFhiUqwygVjTDOjqTKqJ2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;610&quot; height=&quot;436&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;18. 최종 정보 확인 후 'PLACE ORDER'을 누른다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세금이 0원으로 책정된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tDlOR/btrXDgRRB4P/ArpfVUBb9dj4CQfylKSvaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tDlOR/btrXDgRRB4P/ArpfVUBb9dj4CQfylKSvaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tDlOR/btrXDgRRB4P/ArpfVUBb9dj4CQfylKSvaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtDlOR%2FbtrXDgRRB4P%2FArpfVUBb9dj4CQfylKSvaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;829&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;19. 'MANAGE MY DIGITAL REPORTS'를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qCWgb/btrXIy6kpP3/YbgujV9FB47xHNPHLGVsF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qCWgb/btrXIy6kpP3/YbgujV9FB47xHNPHLGVsF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qCWgb/btrXIy6kpP3/YbgujV9FB47xHNPHLGVsF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqCWgb%2FbtrXIy6kpP3%2FYbgujV9FB47xHNPHLGVsF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1058&quot; height=&quot;676&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;20. '코드 배포'를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sdiie/btrXIQsihyq/q0fAwZ0wiGKU2YL2qqB6E0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sdiie/btrXIQsihyq/q0fAwZ0wiGKU2YL2qqB6E0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sdiie/btrXIQsihyq/q0fAwZ0wiGKU2YL2qqB6E0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSdiie%2FbtrXIQsihyq%2Fq0fAwZ0wiGKU2YL2qqB6E0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1338&quot; height=&quot;996&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;996&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;21. 배포할 번들을 선택하고 '다음'을 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpcE0Y/btrXAkBk4e9/OKps1aw3LxjjWHloZCnrr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpcE0Y/btrXAkBk4e9/OKps1aw3LxjjWHloZCnrr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpcE0Y/btrXAkBk4e9/OKps1aw3LxjjWHloZCnrr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpcE0Y%2FbtrXAkBk4e9%2FOKps1aw3LxjjWHloZCnrr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;764&quot; height=&quot;434&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;22. 배포 방법에서 '이메일 코드'를 누른다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이메일 코드를 누르면, 해당 이메일로 테스트 진행 초청 메일이 보내진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV05Au/btrXBk19Sfc/kLRfAvPzlnYWghhRlUFR3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV05Au/btrXBk19Sfc/kLRfAvPzlnYWghhRlUFR3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV05Au/btrXBk19Sfc/kLRfAvPzlnYWghhRlUFR3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV05Au%2FbtrXBk19Sfc%2FkLRfAvPzlnYWghhRlUFR3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;735&quot; height=&quot;487&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;23. 이메일 주소를 입력하고 언어를 'Korean'으로 선택하고 '저장'을 누른다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장을 누르면 아래에 수신자가 추가된 것을 확인할 수 있다. 본인은 타인에게도 보내보았고, 테스트를 잘 진행할 수 있는 것을 확인하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yjnbJ/btrXChw30VX/vN2GBxT7LaG22OqGvu2kGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yjnbJ/btrXChw30VX/vN2GBxT7LaG22OqGvu2kGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yjnbJ/btrXChw30VX/vN2GBxT7LaG22OqGvu2kGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyjnbJ%2FbtrXChw30VX%2FvN2GBxT7LaG22OqGvu2kGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;928&quot; height=&quot;711&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;711&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;24. 언어를 'Korean'으로 선택하고 '저장'을 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;1351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Y9Es/btrXD7NUSb6/1sOR5Bhd2JHWfETyBKrkI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Y9Es/btrXD7NUSb6/1sOR5Bhd2JHWfETyBKrkI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Y9Es/btrXD7NUSb6/1sOR5Bhd2JHWfETyBKrkI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Y9Es%2FbtrXD7NUSb6%2F1sOR5Bhd2JHWfETyBKrkI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;928&quot; height=&quot;1351&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;1351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;25. 내용을 확인 후 '이메일 코드'를 누른다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VR29O/btrXD6OZ4u2/Vw8pL50AWbj9zeakc0uea0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VR29O/btrXD6OZ4u2/Vw8pL50AWbj9zeakc0uea0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VR29O/btrXD6OZ4u2/Vw8pL50AWbj9zeakc0uea0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVR29O%2FbtrXD6OZ4u2%2FVw8pL50AWbj9zeakc0uea0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;909&quot; height=&quot;405&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;26. 초대장이 보내진 것을 확인한다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8E8z7/btrXBMxeKbl/vyKo5kdxEhycp6lI6Ya00k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8E8z7/btrXBMxeKbl/vyKo5kdxEhycp6lI6Ya00k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8E8z7/btrXBMxeKbl/vyKo5kdxEhycp6lI6Ya00k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8E8z7%2FbtrXBMxeKbl%2FvyKo5kdxEhycp6lI6Ya00k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;665&quot; height=&quot;226&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;27. 해당 메일에서 '시작하기'를 눌러 테스트를 진행한다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;1144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b46lY0/btrXJgEhR4w/XHxJIlrYsqdsJwBXuTRKxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b46lY0/btrXJgEhR4w/XHxJIlrYsqdsJwBXuTRKxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b46lY0/btrXJgEhR4w/XHxJIlrYsqdsJwBXuTRKxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb46lY0%2FbtrXJgEhR4w%2FXHxJIlrYsqdsJwBXuTRKxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1036&quot; height=&quot;1144&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;1144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;팁&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 메일에서 '시작하기'를 누르면 자동으로 링크가 연결된다. 아쉽게도 해당 이후 과정은 캡처하지 못했으나, 영어로 된 것을 한국어로 설정하고 테스트를 진행하면 된다. 크게 어려움은 없을 것이다.&lt;/li&gt;
&lt;li&gt;회원가입을 이미 한 사람은 가입할 때 쓴 아이디를 사용하여 로그인하면 된다. 아닌 사람은 새로 가입하여야 한다.&lt;/li&gt;
&lt;li&gt;테스트는 하나의 이메일에 한 번만 할 수 있도록 되어 있다. 새로운 테스트를 진행하고 싶으면 새로운 계정을 생성하여 진행하자.&lt;/li&gt;
&lt;li&gt;테스트는 177문항이며 20초의 제한시간이 지나가면 응답이 자동으로 기록되고 다음 문제로 넘어간다는 것을 주의하자.&lt;/li&gt;
&lt;li&gt;테스트를 진행할 때, 자신이 되고자 하는 사람이라고 생각하는 것보다, 지난 1년을 돌아보았을 때, 자신이 어떻게 행동했는지를 근거로 선택하면 조금 더 쉬울 것이다.&lt;/li&gt;
&lt;li&gt;실험 중간에 뒤로가기 등을 누르거나 창이 꺼지면 돈이 그대로 날라갑니다.&lt;/li&gt;
&lt;li&gt;반드시 방해 받지 않는 환경에서 마음 편하게 보는 것을 추천합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 갤럽의 클리프턴 스트렝스를 진행해보았다. 몇 년 전부터 지금까지 계속 MBTI가 유행을 타고 있지만, 우리 모두 경험적으로 신뢰도가 부족하다는 것을 알 수 있다. 오히려 필자는 해당 검사 결과에 자신을 맞추려는 사람들을 많이 보았다. 반면, 갤럽 강점 진단은 비싸다고 생각할 수 있지만 충분히 자신을 객관적으로 판단해서 맞춤형으로 분석해줄 수 있는 테스트라고 생각이 된다. 다음 글에는 강점이 단점이 되는 경우, 클리프턴 스트렝스에서 바라보는 강점과 약점의 의미, 검사 결과지 분석 방법에 대해 설명할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글이 도움이 되었기를 바랍니다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>cliftonstrengths</category>
      <category>gallup</category>
      <category>strengthsfinder</category>
      <category>갤럽</category>
      <category>갤럽 강점</category>
      <category>갤럽 강점 무료</category>
      <category>갤럽 강점 싸게</category>
      <category>갤럽 강점 진단</category>
      <category>스트렝스파인더</category>
      <category>클리프턴스트렝스</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/136</guid>
      <comments>https://hoohaha.tistory.com/136#entry136comment</comments>
      <pubDate>Wed, 1 Feb 2023 00:18:28 +0900</pubDate>
    </item>
    <item>
      <title>[클라이밍] 클라이밍 전 필요한 스트레칭 정리</title>
      <link>https://hoohaha.tistory.com/135</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;관절 돌리기&lt;/li&gt;
&lt;li&gt;상체 스트레칭&lt;/li&gt;
&lt;li&gt;하체 스트레칭&lt;/li&gt;
&lt;li&gt;폼롤러 마사지&lt;/li&gt;
&lt;li&gt;마무리 스트레칭 및 몸풀기 운동&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관절 돌리기 - 발목에서 목까지(&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=giftsmile4u&amp;amp;logNo=220478891590&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;손목 발목 돌리기&lt;/li&gt;
&lt;li&gt;무릎 돌리기&lt;/li&gt;
&lt;li&gt;허리 돌리기&lt;/li&gt;
&lt;li&gt;어깨 돌리기&lt;/li&gt;
&lt;li&gt;목 돌리기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfzaG7/btrXo5X0FKJ/53P2D1PyjjLXTvN8y0w4nk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfzaG7/btrXo5X0FKJ/53P2D1PyjjLXTvN8y0w4nk/img.webp&quot; data-alt=&quot;출처:&amp;amp;nbsp;https://m.blog.naver.com/glddldi2/220531338777&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfzaG7/btrXo5X0FKJ/53P2D1PyjjLXTvN8y0w4nk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfzaG7%2FbtrXo5X0FKJ%2F53P2D1PyjjLXTvN8y0w4nk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;592&quot; height=&quot;389&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;nbsp;https://m.blog.naver.com/glddldi2/220531338777&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상체 스트레칭(&lt;a href=&quot;https://allaboutexhealth.com/%EC%95%84%EC%B9%A8-5%EB%B6%84-%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%B9%AD/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목 위로 들기(손 깍지 후 엄지로 턱 밀기)&lt;/li&gt;
&lt;li&gt;목 아래로 내리기(양손으로 머리 감싸기)&lt;/li&gt;
&lt;li&gt;목 사선으로 늘려주기(승모근이 늘어나도록)&lt;/li&gt;
&lt;li&gt;팔 껴안아 당기기(삼두 늘려주기)&lt;/li&gt;
&lt;li&gt;손목 늘려주기(&lt;a href=&quot;http://www.soo365.co.kr/mediinfo-20191104-1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.soo365.co.kr/mediinfo-20191104-1/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lQ7xt/btrXmxgB1bL/wkcXBCOjiKAsYIjO2qW1H1/img.jpg&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/lQ7xt/btrXmxgB1bL/wkcXBCOjiKAsYIjO2qW1H1/img.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;596&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;팔꿈치 뒤로 끌어 당기기(광배근 상부 늘리기)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;상체를 좌우로 기울이기(광배근 하부 늘리기)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하체 스트레칭 - pt 선생님은 상체보다 하체 스트레칭이 어렵고 중요하고 오래 걸린다 하였음&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다리 짧게 벌리기(내전근 늘리기)&lt;/li&gt;
&lt;li&gt;다리 크게 벌리기(내전근 늘리기, 안쪽발로 지지)&lt;/li&gt;
&lt;li&gt;종아리 늘리기(넓게 벌린 상태에서 뒷꿈치로 지지)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;햄스트링 늘리기(뒷벅지 늘리기)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;외측광근 늘리기(뒷벅지-옆벅지 사이)&lt;/li&gt;
&lt;li&gt;내전근 늘리기(안벅지 늘리기, &lt;a href=&quot;https://kr.pixtastock.com/illustration/81603017&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;대퇴사두 늘리기(앞벅지 늘리기) - 런지 자세에서 손으로 폼롤러 지지 후 늘리기&lt;/li&gt;
&lt;li&gt;장요근 늘리기 - 폼롤러로 지지 후 뒷쪽 발을 손으로 잡아서 늘리기(&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=ptmaster14&amp;amp;logNo=220290668849&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;폼롤러 마사지 - 부위 당 30~50번 추천&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;하체&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;허벅지 전체(앞, 옆, 안, 뒤) 큰 부분 위주로&lt;/li&gt;
&lt;li&gt;종아리 전체(앞, 옆, 뒤)&lt;/li&gt;
&lt;li&gt;허벅지-무릎 연결 부분&lt;/li&gt;
&lt;li&gt;뒷벅지-종아리에 폼롤러 끼고 앉기&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;상체&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;등 상부 - 팔을 명치로 모으기 - 중부, 하부 승모근 위주&lt;/li&gt;
&lt;li&gt;등 상부 - 머리 뒤 손깍지 - 날개뼈&amp;nbsp;&lt;/li&gt;
&lt;li&gt;광배근 - 상부 위주&lt;/li&gt;
&lt;li&gt;광배근 - 하부 위주&lt;/li&gt;
&lt;li&gt;광배근-삼두근&lt;/li&gt;
&lt;li&gt;가슴 근육&lt;/li&gt;
&lt;li&gt;삼각근&lt;/li&gt;
&lt;li&gt;상부승모근-목&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리 스트레칭 및 몸풀기 운동&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앉았다 일어서기&lt;/li&gt;
&lt;li&gt;앉아서 다리 양옆으로 벌리기&lt;/li&gt;
&lt;li&gt;옆으로 무릎 꿇은 상태에서 무릎-발 접촉시키고 상체 돌려서 광배근 늘려주기&lt;/li&gt;
&lt;li&gt;기타 덜 풀렸다고 생각되는 부분 풀어주기&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>기타</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/135</guid>
      <comments>https://hoohaha.tistory.com/135#entry135comment</comments>
      <pubDate>Sun, 29 Jan 2023 22:16:24 +0900</pubDate>
    </item>
    <item>
      <title>[PyTorch] 공식 문서 Learn the Basics 요약 - 8. The full model building process 및 전체 요약</title>
      <link>https://hoohaha.tistory.com/134</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9Xu6o/btrWRkO9HBl/MMgbG0otZYch6jyRU8QfT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9Xu6o/btrWRkO9HBl/MMgbG0otZYch6jyRU8QfT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9Xu6o/btrWRkO9HBl/MMgbG0otZYch6jyRU8QfT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9Xu6o%2FbtrWRkO9HBl%2FMMgbG0otZYch6jyRU8QfT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;246&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 모델 구축 프로세스(The full moel building process)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 작업(Working with data)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 생성(Creating models)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 매개변수 최적화(Optimizing the Model Parameters)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 저장(Saving Models)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 불러오기(Loading Models)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약(Summary)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체 모델 구축 프로세스(The full moel building process)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에서는 기계 학습의 일반적인 작업을 위해 API를 통해 실행 예정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 것은 각 세션의 링크 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 작업(Working with data)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pytorch:&lt;br /&gt;데이터 작업을 위한 두 가지 프리미티브(torch.utils.data.DataLoader, torch.utils.data.Dataset) 존재&lt;/li&gt;
&lt;li&gt;torch.utils.data.DataLoader: Dataset을 iterable을 매핑&lt;/li&gt;
&lt;li&gt;torch.utils.data.Dataset: 샘플 및 라벨 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674293805278&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;%matplotlib inline
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda, Compose
import matplotlib.pyplot as plt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pytorch:&lt;br /&gt;데이터셋을 포함하여 도메인별 라이브러리 제공: TorchText, TorchVision, TorchAudio&lt;/li&gt;
&lt;li&gt;torchvision.datasets module:&lt;br /&gt;CIFAR, COCO 등의 실제 비전 데이터에 대한 Dataset 개체 포함되어 있음&lt;/li&gt;
&lt;li&gt;모든 TorchVision Dataset:&lt;br /&gt;샘플과 라벨을 수정하기 위한 trasform, target_transform 이라는 argument 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674293815334&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Download training data from open datasets.
training_data = datasets.FashionMNIST(
    root=&quot;data&quot;,
    train=True,
    download=True,
    transform=ToTensor(),
)

# Download test data from open datasets.
test_data = datasets.FashionMNIST(
    root=&quot;data&quot;,
    train=False,
    download=True,
    transform=ToTensor(),
)


Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz
Using downloaded and verified file: data/FashionMNIST/raw/train-images-idx3-ubyte.gz
Extracting data/FashionMNIST/raw/train-images-idx3-ubyte.gz to data/FashionMNIST/raw

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz
Using downloaded and verified file: data/FashionMNIST/raw/train-labels-idx1-ubyte.gz
Extracting data/FashionMNIST/raw/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz
Using downloaded and verified file: data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz
Extracting data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz
Using downloaded and verified file: data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz
Extracting data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DataLoader에 Dataset을 인수(argument)로 전달, 아래와 같은 기능 지원&lt;br /&gt;dataset에 대한 iterable을 wrapping&lt;br /&gt;자동 배치, 샘플링, 셔플링, 멀티프로세스 데이터 로드&lt;/li&gt;
&lt;li&gt;batch size = 64 -&amp;gt; dataloader iterable은 각 배치 당 64개의 피쳐 및 라벨 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674293866588&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;batch_size = 64

# Create data loaders.
train_dataloader = DataLoader(training_data, batch_size=batch_size)
test_dataloader = DataLoader(test_data, batch_size=batch_size)

for X, y in test_dataloader:
    print(&quot;Shape of X [N, C, H, W]: &quot;, X.shape)
    print(&quot;Shape of y: &quot;, y.shape, y.dtype)
    break
    
# Display sample data
figure = plt.figure(figsize=(10, 8))
cols, rows = 5, 5
for i in range(1, cols * rows + 1):
    idx = torch.randint(len(test_data), size=(1,)).item()
    img, label = test_data[idx]
    figure.add_subplot(rows, cols, i)
    plt.title(label)
    plt.axis(&quot;off&quot;)
    plt.imshow(img.squeeze(), cmap=&quot;gray&quot;)
plt.show()

Shape of X [N, C, H, W]:  torch.Size([64, 1, 28, 28])
Shape of y:  torch.Size([64]) torch.int64&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chV9dL/btrWR8gg62l/fAVrif5nri1EAR81lGzKhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chV9dL/btrWR8gg62l/fAVrif5nri1EAR81lGzKhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chV9dL/btrWR8gg62l/fAVrif5nri1EAR81lGzKhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchV9dL%2FbtrWR8gg62l%2FfAVrif5nri1EAR81lGzKhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;767&quot; height=&quot;656&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 생성(Creating models)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신경망 정의 위해 nn.Module을 상속하는 클래스 생성&lt;/li&gt;
&lt;li&gt;__init__: 네트워크 계층 정의&lt;/li&gt;
&lt;li&gt;forward: 인풋이 네트워크를 통과하는 방법 정의&lt;/li&gt;
&lt;li&gt;GPU 사용 가능한 경우 신경망 연산 가속&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674293934496&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Get cpu or gpu device for training.
device = &quot;cuda&quot; if torch.cuda.is_available() else &quot;cpu&quot;
print(&quot;Using {} device&quot;.format(device))

# Define model
class NeuralNetwork(nn.Module):
    def __init__(self):
        super(NeuralNetwork, self).__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
            nn.ReLU()
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

model = NeuralNetwork().to(device)
print(model)


Using cuda device
NeuralNetwork(
  (flatten): Flatten(start_dim=1, end_dim=-1)
  (linear_relu_stack): Sequential(
    (0): Linear(in_features=784, out_features=512, bias=True)
    (1): ReLU()
    (2): Linear(in_features=512, out_features=512, bias=True)
    (3): ReLU()
    (4): Linear(in_features=512, out_features=10, bias=True)
    (5): ReLU()
  )
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 매개변수 최적화(Optimizing the Model Parameters)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 학습에 필요한 로스 함수 및 옵티마이저 정의&lt;br /&gt;loss function: nn.CrossEntropyLoss&lt;br /&gt;optimizer: Stochastic Gradient Descent&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674293977713&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;loss_fn = nn.CrossEntropyLoss()
learning_rate = 1e-3
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 학습 루프 안에서의 모델의 동작:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;배치로 제공된 학습 데이터 셋을 이용하여 예측 수행&lt;/li&gt;
&lt;li&gt;오류 역전파&lt;/li&gt;
&lt;li&gt;모델 학습&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1674293984722&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def train(dataloader, model, loss_fn, optimizer):
    size = len(dataloader.dataset)
    for batch, (X, y) in enumerate(dataloader):
        X, y = X.to(device), y.to(device)
        
        # Compute prediction error
        pred = model(X)
        loss = loss_fn(pred, y)
        
        # Backpropagation
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if batch % 100 == 0:
            loss, current = loss.item(), batch * len(X)
            print(f&quot;loss: {loss:&amp;gt;7f}  [{current:&amp;gt;5d}/{size:&amp;gt;5d}]&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 잘 학습하고 있는지 확인:&lt;br /&gt;테스트 데이터셋 이용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674294001802&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def test(dataloader, model):
    size = len(dataloader.dataset)
    model.eval()
    test_loss, correct = 0, 0
    with torch.no_grad():
        for X, y in dataloader:
            X, y = X.to(device), y.to(device)
            pred = model(X)
            test_loss += loss_fn(pred, y).item()
            correct += (pred.argmax(1) == y).type(torch.float).sum().item()
    test_loss /= size
    correct /= size
    print(f&quot;Test Error: \n Accuracy: {(100*correct):&amp;gt;0.1f}%, Avg loss: {test_loss:&amp;gt;8f} \n&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습 프로세스: 여러 에폭에 걸쳐 수행&lt;/li&gt;
&lt;li&gt;각 에폭 내에서 모델은 매개변수 학습&lt;/li&gt;
&lt;li&gt;모델의 정확도와 손실을 각 에폭에서 인쇄 -&amp;gt; 매 에폭마다 정확도가 증가하는지, 손실이 감소하는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674294013892&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;epochs = 15
for t in range(epochs):
    print(f&quot;Epoch {t+1}\n-------------------------------&quot;)
    train(train_dataloader, model, loss_fn, optimizer)
    test(test_dataloader, model)
print(&quot;Done!&quot;)


Epoch 1
-------------------------------
loss: 2.295773  [    0/60000]
loss: 2.297218  [ 6400/60000]
loss: 2.283425  [12800/60000]
loss: 2.278249  [19200/60000]
loss: 2.279926  [25600/60000]
loss: 2.260619  [32000/60000]
loss: 2.256614  [38400/60000]
loss: 2.248361  [44800/60000]
loss: 2.234987  [51200/60000]
loss: 2.211842  [57600/60000]
Test Error: 
 Accuracy: 41.4%, Avg loss: 0.034903 

Epoch 2
-------------------------------
loss: 2.227791  [    0/60000]
loss: 2.239108  [ 6400/60000]
loss: 2.196185  [12800/60000]
loss: 2.183881  [19200/60000]
loss: 2.218200  [25600/60000]
loss: 2.170907  [32000/60000]
loss: 2.167650  [38400/60000]
loss: 2.151818  [44800/60000]
loss: 2.121467  [51200/60000]
loss: 2.078620  [57600/60000]
Test Error: 
 Accuracy: 47.1%, Avg loss: 0.033028 

Epoch 3
-------------------------------
loss: 2.121974  [    0/60000]
loss: 2.144973  [ 6400/60000]
loss: 2.049951  [12800/60000]
loss: 2.025212  [19200/60000]
loss: 2.119183  [25600/60000]
loss: 2.028407  [32000/60000]
loss: 2.016531  [38400/60000]
loss: 1.999072  [44800/60000]
loss: 1.939542  [51200/60000]
loss: 1.869733  [57600/60000]
Test Error: 
 Accuracy: 47.2%, Avg loss: 0.030161 

Epoch 4
-------------------------------
loss: 1.966496  [    0/60000]
loss: 2.005283  [ 6400/60000]
loss: 1.842639  [12800/60000]
loss: 1.798291  [19200/60000]
loss: 1.996712  [25600/60000]
loss: 1.860519  [32000/60000]
loss: 1.833745  [38400/60000]
loss: 1.834117  [44800/60000]
loss: 1.752414  [51200/60000]
loss: 1.658906  [57600/60000]
Test Error: 
 Accuracy: 48.4%, Avg loss: 0.027377 

Epoch 5
-------------------------------
loss: 1.817958  [    0/60000]
loss: 1.873164  [ 6400/60000]
loss: 1.658233  [12800/60000]
loss: 1.604004  [19200/60000]
loss: 1.892859  [25600/60000]
loss: 1.728574  [32000/60000]
loss: 1.694584  [38400/60000]
loss: 1.716881  [44800/60000]
loss: 1.620669  [51200/60000]
loss: 1.520065  [57600/60000]
Test Error: 
 Accuracy: 51.3%, Avg loss: 0.025398 

Epoch 6
-------------------------------
loss: 1.705050  [    0/60000]
loss: 1.772956  [ 6400/60000]
loss: 1.524106  [12800/60000]
loss: 1.473383  [19200/60000]
loss: 1.793820  [25600/60000]
loss: 1.624757  [32000/60000]
loss: 1.595235  [38400/60000]
loss: 1.626289  [44800/60000]
loss: 1.523839  [51200/60000]
loss: 1.426233  [57600/60000]
Test Error: 
 Accuracy: 53.5%, Avg loss: 0.023906 

Epoch 7
-------------------------------
loss: 1.612589  [    0/60000]
loss: 1.694386  [ 6400/60000]
loss: 1.419676  [12800/60000]
loss: 1.378877  [19200/60000]
loss: 1.704812  [25600/60000]
loss: 1.536829  [32000/60000]
loss: 1.516409  [38400/60000]
loss: 1.551574  [44800/60000]
loss: 1.448999  [51200/60000]
loss: 1.354901  [57600/60000]
Test Error: 
 Accuracy: 54.4%, Avg loss: 0.022727 

Epoch 8
-------------------------------
loss: 1.532547  [    0/60000]
loss: 1.630929  [ 6400/60000]
loss: 1.336020  [12800/60000]
loss: 1.305433  [19200/60000]
loss: 1.631139  [25600/60000]
loss: 1.462314  [32000/60000]
loss: 1.452916  [38400/60000]
loss: 1.491249  [44800/60000]
loss: 1.388288  [51200/60000]
loss: 1.299752  [57600/60000]
Test Error: 
 Accuracy: 55.3%, Avg loss: 0.021782 

Epoch 9
-------------------------------
loss: 1.462481  [    0/60000]
loss: 1.578309  [ 6400/60000]
loss: 1.268808  [12800/60000]
loss: 1.243797  [19200/60000]
loss: 1.572057  [25600/60000]
loss: 1.400606  [32000/60000]
loss: 1.401813  [38400/60000]
loss: 1.444131  [44800/60000]
loss: 1.337315  [51200/60000]
loss: 1.257235  [57600/60000]
Test Error: 
 Accuracy: 55.8%, Avg loss: 0.021020 

Epoch 10
-------------------------------
loss: 1.402163  [    0/60000]
loss: 1.532682  [ 6400/60000]
loss: 1.213558  [12800/60000]
loss: 1.192357  [19200/60000]
loss: 1.524502  [25600/60000]
loss: 1.349040  [32000/60000]
loss: 1.359848  [38400/60000]
loss: 1.406721  [44800/60000]
loss: 1.294481  [51200/60000]
loss: 1.222457  [57600/60000]
Test Error: 
 Accuracy: 56.7%, Avg loss: 0.020403 

Epoch 11
-------------------------------
loss: 1.351255  [    0/60000]
loss: 1.496092  [ 6400/60000]
loss: 1.168390  [12800/60000]
loss: 1.149713  [19200/60000]
loss: 1.487448  [25600/60000]
loss: 1.306274  [32000/60000]
loss: 1.324405  [38400/60000]
loss: 1.376118  [44800/60000]
loss: 1.258274  [51200/60000]
loss: 1.193912  [57600/60000]
Test Error: 
 Accuracy: 57.4%, Avg loss: 0.019891 

Epoch 12
-------------------------------
loss: 1.305900  [    0/60000]
loss: 1.466068  [ 6400/60000]
loss: 1.130126  [12800/60000]
loss: 1.114587  [19200/60000]
loss: 1.458147  [25600/60000]
loss: 1.270395  [32000/60000]
loss: 1.293715  [38400/60000]
loss: 1.350162  [44800/60000]
loss: 1.227087  [51200/60000]
loss: 1.169333  [57600/60000]
Test Error: 
 Accuracy: 58.3%, Avg loss: 0.019452 

Epoch 13
-------------------------------
loss: 1.264979  [    0/60000]
loss: 1.439438  [ 6400/60000]
loss: 1.097137  [12800/60000]
loss: 1.085567  [19200/60000]
loss: 1.433970  [25600/60000]
loss: 1.239276  [32000/60000]
loss: 1.266291  [38400/60000]
loss: 1.327267  [44800/60000]
loss: 1.199434  [51200/60000]
loss: 1.148261  [57600/60000]
Test Error: 
 Accuracy: 59.0%, Avg loss: 0.019064 

Epoch 14
-------------------------------
loss: 1.227596  [    0/60000]
loss: 1.414626  [ 6400/60000]
loss: 1.067816  [12800/60000]
loss: 1.061232  [19200/60000]
loss: 1.413360  [25600/60000]
loss: 1.212436  [32000/60000]
loss: 1.240914  [38400/60000]
loss: 1.306429  [44800/60000]
loss: 1.174499  [51200/60000]
loss: 1.129985  [57600/60000]
Test Error: 
 Accuracy: 59.8%, Avg loss: 0.018713 

Epoch 15
-------------------------------
loss: 1.192792  [    0/60000]
loss: 1.391189  [ 6400/60000]
loss: 1.041390  [12800/60000]
loss: 1.040678  [19200/60000]
loss: 1.396070  [25600/60000]
loss: 1.188643  [32000/60000]
loss: 1.217234  [38400/60000]
loss: 1.287394  [44800/60000]
loss: 1.151905  [51200/60000]
loss: 1.113297  [57600/60000]
Test Error: 
 Accuracy: 60.6%, Avg loss: 0.018389 

Done!&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처음에 정확도 좋지 않을 수 있음&lt;/li&gt;
&lt;li&gt;에폭 수 늘리거나 learning_rate 증가 고려&lt;/li&gt;
&lt;li&gt;선택한 모델이 최적의 모델이 아닐 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 저장(Saving Models)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델을 저장하는 일반적인 방법:&lt;br /&gt;internal state dictionary를 직렬화(serialize)하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674295424961&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;torch.save(model.state_dict(), &quot;data/model.pth&quot;)
print(&quot;Saved PyTorch Model State to model.pth&quot;)


Saved PyTorch Model State to model.pth&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 불러오기(Loading Models)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 로드하는 프로세스:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;모델의 구조 생성&lt;/li&gt;
&lt;li&gt;구조에 internal state dictionary 로드&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1674295537411&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = NeuralNetwork()
model.load_state_dict(torch.load(&quot;data/model.pth&quot;))


&amp;lt;All keys matched successfully&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 모델 사용하여 예측 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674295573503&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;classes = [
    &quot;T-shirt/top&quot;,
    &quot;Trouser&quot;,
    &quot;Pullover&quot;,
    &quot;Dress&quot;,
    &quot;Coat&quot;,
    &quot;Sandal&quot;,
    &quot;Shirt&quot;,
    &quot;Sneaker&quot;,
    &quot;Bag&quot;,
    &quot;Ankle boot&quot;,
]

model.eval()
x, y = test_data[0][0], test_data[0][1]
with torch.no_grad():
    pred = model(x)
    predicted, actual = classes[pred[0].argmax(0)], classes[y]
    print(f'Predicted: &quot;{predicted}&quot;, Actual: &quot;{actual}&quot;')


Predicted: &quot;Sandal&quot;, Actual: &quot;Ankle boot&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;튜토리얼 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;요약(Summary)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재까지 신경망 사용하여 기계 학습 모델 구축하는 핵심 개념 공부 및 pytorch로 구현&lt;/li&gt;
&lt;li&gt;FashionMNIST 이용한 이미지 분류 모델 구축함&lt;/li&gt;
&lt;li&gt;다음과 같은 분야 배움&lt;/li&gt;
&lt;li&gt;Tensor를 CPU, GPU와 함께 사용하는 방법&lt;/li&gt;
&lt;li&gt;데이터셋 manage, scale, normalize 방법&lt;/li&gt;
&lt;li&gt;신경망을 사용하여 모델을 구축하는 방법&lt;/li&gt;
&lt;li&gt;모델 최적화 방법&lt;/li&gt;
&lt;li&gt;모델 추론 최적화 방법(model.eval(), with torch.no_grad(), require_grad=False, tensor.detach() 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;require_grad=False: &lt;br /&gt;텐서에 대한 그래디언트가 역방향 패스 중에 계산되어야 하는지 여부를 나타내는 PyTorch 텐서의 속성&lt;br /&gt;기본적으로 PyTorch에 의해 생성된 모든 텐서: requires_grad=True&lt;br /&gt;False인 경우 텐서에 대한 그래디언트는 역방향 전달 중에 계산되지 않으며 텐서의 grad 속성은 업데이트되지 않음&lt;/li&gt;
&lt;li&gt;torch.no_grad():&lt;br /&gt;블록 내의 모든 텐서에 대한 그래디언트 추적을 일시적으로 비활성화하는 PyTorch에서 제공하는 컨텍스트 관리자&lt;br /&gt;그래디언트 추적이 비활성화되면 포워드 패스가 평소와 같이 수행되지만 그래디언트가 계산되지 않고 텐서의 그래드 속성이 업데이트되지 않음&lt;br /&gt;그래디언트가 필요하지 않을 때 계산 속도를 높이고 메모리를 절약하는 데 유용할 수 있음&lt;/li&gt;
&lt;li&gt;detach(): &lt;br /&gt;원래 텐서와 동일한 저장소를 공유하지만 그래디언트 추적이 비활성화된 새 텐서를 반환하는 PyTorch에서 제공하는 메서드&lt;br /&gt;원래 텐서는 수정되지 않지만 새 텐서는 기울기가 계산되지 않으며 grad 속성이 업데이트되지 않음&lt;br /&gt;사용자가 추가 계산을 위해 원래 텐서를 유지하고 싶지만 기울기가 흐르는 것을 방지하려는 경우에 유용할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약:&lt;br /&gt;requires_grad=False: 텐서에 대한 그래디언트 추적을 영구적으로 비활성화하는 방법&lt;br /&gt;torch.no_grad(): 그래디언트 추적을 일시적으로 비활성화하는 컨텍스트 관리자&lt;br /&gt;detach(): 텐서를 계산 기록에서 분리하는 방법으로 유용할 수 있음, 그래디언트 흐르는 것 방지&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pytorch/튜토리얼</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/134</guid>
      <comments>https://hoohaha.tistory.com/134#entry134comment</comments>
      <pubDate>Sat, 21 Jan 2023 19:20:25 +0900</pubDate>
    </item>
    <item>
      <title>[PyTorch] 공식 문서 Learn the Basics 요약 - 7. Save and load the model</title>
      <link>https://hoohaha.tistory.com/133</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2kSyA/btrWRRk1GF9/I7NqNGfbxef650x9gEKsOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2kSyA/btrWRRk1GF9/I7NqNGfbxef650x9gEKsOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2kSyA/btrWRRk1GF9/I7NqNGfbxef650x9gEKsOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2kSyA%2FbtrWRRk1GF9%2FI7NqNGfbxef650x9gEKsOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;246&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 저장하고 불러오기(Save and load the model)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 가중치 저장하고 불러오기(Saving and Loading Model Weights)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 형태를 포함하여 저장하고 불러오기(Saving and Loading Models with Shapes)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 추론(Model Inference)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 ONNX로 내보내기(Exporting the model to ONNX)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword:&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;torch.save, model.state_dict(), model.load_state_dict(), torch.load(), pickle module, 직렬화(serialize), 역직렬화(deserialize), model.eval(), 드롭아웃(dropout), 배치 정규화(batch normalization), %matplotlib inline, ONNX(Open Neural Network Exchange), onnxruntime, torch.onnx, Java, JavaScript, C#, ML.NET, 실행 그래프(execution graph), ONNX 내보내기(ONNX export), Persist, model.onnx, onnx.export, onnxruntime.InferenceSession, onnxruntime.InferenceSession.get_inputs(), onnxruntime.InferenceSession.run()&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델 저장하고 불러오기(Save and load the model)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 장에서는 저장하기나 불러오기를 통해 모델의 상태를 유지(persist)하고 모델의 예측을 실행하는 방법을 알아보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1674229421512&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torchvision.models as models&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 가중치 저장하고 불러오기(Saving and Loading Model Weights)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PyTorch 모델은 학습한 매개변수를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f3f4f7; color: #6c6c6d;&quot;&gt;state_dict&lt;/span&gt;라고 불리는 내부 상태 사전(internal state dictionary)에 저장합니다. 이 상태 값들은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f3f4f7; color: #6c6c6d;&quot;&gt;torch.save&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메소드를 사용하여 저장(persist)할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1674229498292&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = models.vgg16(pretrained=True)
torch.save(model.state_dict(), 'model_weights.pth')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;모델 가중치를 불러오기 위해서는, 먼저 동일한 모델의 인스턴스(instance)를 생성한 다음에&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f3f4f7; color: #6c6c6d;&quot;&gt;load_state_dict()&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;메소드를 사용하여 매개변수들을 불러옵니다.&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1674229662272&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = models.vgg16() # 기본 가중치를 불러오지 않으므로 pretrained=True를 지정하지 않습니다.
model.load_state_dict(torch.load('model_weights.pth'))
model.eval()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;id4&quot;&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추론(inference)을 하기 전에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #6c6c6d;&quot;&gt;model.eval()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메소드를 호출하여 드롭아웃(dropout)과 배치 정규화(batch normalization)를 평가 모드(evaluation mode)로 설정해야 합니다. 그렇지 않으면 일관성 없는 추론 결과가 생성됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;id5&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델의 형태를 포함하여 저장하고 불러오기(Saving and Loading Models with Shapes)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 가중치를 불러올 때, 신경망의 구조를 정의하기 위해 모델 클래스를 먼저 생성(instantiate)해야 했습니다. 이 클래스의 구조를 모델과 함께 저장하고 싶으면, (&lt;span style=&quot;background-color: #f3f4f7; color: #6c6c6d;&quot;&gt;model.state_dict()&lt;/span&gt;가 아닌)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f3f4f7; color: #6c6c6d;&quot;&gt;model&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 저장 함수에 전달합니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1674233285014&quot; class=&quot;gams&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;torch.save(model, 'model.pth')&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 모델을 불러올 수 있습니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1674233285014&quot; class=&quot;ini&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = torch.load('model.pth')&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;id5&quot;&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 접근 방식은 Python&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/library/pickle.html&quot;&gt;pickle&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모듈을 사용하여 모델을 직렬화(serialize)하므로, 모델을 불러올 때 실제 클래스 정의(definition)를 적용(rely on)합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: torch.save, model.state_dict(), model.load_state_dict(), torch.load(), pickle module, 직렬화(serialize), 역직렬화(deserialize), model.eval(), 드롭아웃(dropout), 배치 정규화(batch normalization)&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;torch.save:&lt;br /&gt;모델의 매개변수와 옵티마이저의 상태를 포함하여 PyTorch 모델의 상태를 저장하는 데 사용되는 함수&lt;br /&gt;나중에 torch.load 기능을 사용하여 로드할 수 있는 파일에 모델을 저장&lt;br /&gt;또한 옵티마이저의 state_dict를 저장하므로 옵티마이저는 중단된 위치에서 학습을 다시 시작할 수 있음&lt;br /&gt;모델을 함께 저장할 수 있으며, 이때는 매개변수로 model을 입력하면 됨&lt;/li&gt;
&lt;li&gt;model.state_dict():&lt;br /&gt;모델의 학습 가능한 모든 매개변수를 포함하는 정렬된 사전(ordered dictionary)을 반환하는 함수&lt;br /&gt;리턴 값인 정렬된 사전은 torch.save 함수를 사용하여 모델의 현재 상태를 저장하거나 model.load_state_dict() 함수를 사용하여 사전 훈련된 모델을 로드하는 데 사용할 수 있음&lt;br /&gt;키: 매개변수의 이름&lt;br /&gt;값: 해당 매개변수 값을 포함하는 텐서&lt;/li&gt;
&lt;li&gt;model.load_state_dict():&lt;br /&gt;이전에 저장된 state_dict에서 모델의 상태를 로드하는 데 사용되는 함수&lt;br /&gt;state_dict를 가져와 저장된 매개변수 값을 모델의 매개변수에 매핑함&lt;/li&gt;
&lt;li&gt;torch.load():&lt;br /&gt;모델의 매개변수와 옵티마이저의 상태를 포함하여 이전에 저장된 PyTorch 모델을 로드하는 함수&lt;br /&gt;파일 경로를 인수로 사용하고 model.load_state_dict()에 전달할 수 있는 사전을 반환&lt;br /&gt;모델을 함께 불러올 수 있으며, 이때는 매개변수로 모델이 함께 저장된 path를 입력하면 됨&lt;/li&gt;
&lt;li&gt;pickle module:&lt;br /&gt;Python dictionary 및 list와 같은 개체를 직렬화(serialize) 및 역직렬화(deserialize)하는 데 사용됨&lt;br /&gt;PyTorch 모델을 저장하고 로드하는 데에도 사용할 수 있음&lt;br /&gt;torch.save 및 torch.load 함수보다 효율성이 떨어지므로 사용하지 않는 것이 좋음&lt;br /&gt;--&lt;br /&gt;피클 모듈을 사용하여 PyTorch 모델을 저장하고 로드하는 것은 일반적으로 권장되지 않음&lt;br /&gt;옵티마이저의 내부 상태(internal state) 및 모델의 역방향 전달 기록(backward pass history of the model)과 같이 모델을 올바르게 재구성하는 데 필요한 모든 정보를 처리하지 못할 수 있기 때문&lt;br /&gt;대신 PyTorch 모델을 처리하도록 특별히 설계되었으며 모델을 올바르게 재구성하는 데 필요한 모든 정보를 저장하고 로드할 수 있는 torch.save 및 torch.load 함수를 사용하는 것이 좋음&lt;br /&gt;--&lt;br /&gt;그러나 이전에 pickle 모듈을 사용하여 모델을 저장한 경우 pickle.load() 함수를 사용하여 객체를 역직렬화하고 모델과 해당 속성을 다시 가져올 수 있음&lt;br /&gt;그런 다음 model.load_state_dict()를 사용하여 모델의 상태 사전(state dictionary)을 로드하고 optimizer.load_state_dict()를 사용하여 옵티마이저의 상태 사전을 로드하고 옵티마이저를 모델로 설정할 수 있음&lt;br /&gt;pickle로 모델을 저장한 후 PyTorch 버전이 변경되면 로드 프로세스가 제대로 작동하지 않을 수 있다는 점 유의&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;직렬화(serialize):&lt;br /&gt;PyTorch 모델과 같은 복잡한 개체 또는 데이터 구조를 저장하거나 전송할 수 있는 형식으로 변환하는 프로세스&lt;br /&gt;이 프로세스를 개체 &quot;pickling&quot; 또는 &quot;flattening&quot;라고도 함&lt;br /&gt;torch.save 함수는 PyTorch 모델을 직렬화하는 데 사용할 수 있음&lt;/li&gt;
&lt;li&gt;역직렬화(deserialize):&lt;br /&gt;PyTorch 모델과 같은 직렬화된 개체 또는 데이터 구조를 다시 원래 형식으로 변환하는 프로세스&lt;br /&gt;이 프로세스를 개체 &quot;unpickling&quot; 또는 &quot;inflating&quot;이라고도 힘&lt;br /&gt;torch.load 함수는 PyTorch 모델을 역직렬화하는 데 사용할 수 있음&lt;/li&gt;
&lt;li&gt;model.eval():&lt;br /&gt;모델을 평가 모드로 설정하는 메서드&lt;br /&gt;테스트 데이터에 대한 모델의 성능을 평가할 때 사용됨&lt;br /&gt;평가 모드는 드롭아웃 및 배치 정규화와 같은 특정 기능을 해제하는 데 사용됨&lt;/li&gt;
&lt;li&gt;드롭아웃(dropout):&lt;br /&gt;훈련 중에 입력 단위의 일부를 무작위로 0으로 설정하는 정규화 기술&lt;br /&gt;모델의 복잡성을 줄이고 활성화에 약간의 노이즈를 도입하여 과적합을 방지하는 데 도움을 줌&lt;br /&gt;일반적으로 학습 중에만 사용되며 평가 또는 추론 중에는 사용되지 않음&lt;/li&gt;
&lt;li&gt;배치 정규화(batch normalization):&lt;br /&gt;평균을 빼고 표준 편차로 나누어 계층의 활성화(activations of layer)를 정규화하는 기술&lt;br /&gt;내부 공변량 변화(internal covariate shift)를 줄여 훈련 과정을 안정화하는 데 도움을 줌&lt;br /&gt;일반적으로 훈련 중에만 사용되며 평가 또는 추론 중에는 사용되지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 추론(Model Inference)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 최적화: 어려운 작업, 다양한 프레임워크 및 하드웨어에서 성능을 최대화하는 데 시간이 많이 소요됨&lt;/li&gt;
&lt;li&gt;ONNX(Open Neural Network Exchange) 런타임: 모든 하드웨어, 클라우드 또는 에지 장치에서 한 번 훈련하고 추론을 가속화하는 솔루션&lt;/li&gt;
&lt;li&gt;ONNX: 신경망 및 기타 기계 학습 모델을 공유하기 위해 여러 공급업체에서 지원하는 공통 형식&lt;/li&gt;
&lt;li&gt;ONNX 이점: Java, JavaScript, C# 및 ML.NET과 같은 다른 프로그래밍 언어 및 프레임워크에서 모델로 추론 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 예제 코드&lt;/p&gt;
&lt;pre id=&quot;code_1674233858922&quot; class=&quot;haskell&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;%matplotlib inline
import torch
import onnxruntime
from torch import nn
import torch.onnx as onnx
import torchvision.models as models
from torchvision import datasets
from torchvision.transforms import ToTensor

class NeuralNetwork(nn.Module):
    def __init__(self):
        super(NeuralNetwork, self).__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
            nn.ReLU()
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits


model = NeuralNetwork()
model.load_state_dict(torch.load('data/model.pth'))
model.eval()&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;keyword: %matplotlib inline, Open Neural Network Exchange (ONNX), onnxruntime, torch.onnx, &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;Java, JavaScript, C#, ML.NET&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;%matplotlib inline:&lt;br /&gt;Jupyter 노트북에서 matplotlib 라이브러리로 생성된 플롯을 별도의 창이 아닌 노트북 내에서 표시하는 데 사용되는 명령&lt;br /&gt;일반적으로 시간 경과에 따른 손실 또는 정확도와 같은 모델의 성능을 시각화하는 데 사용됨&lt;/li&gt;
&lt;li&gt;ONNX(Open Neural Network Exchange):&lt;br /&gt;딥 러닝 모델을 나타내는 개방형 형식&lt;br /&gt;PyTorch 및 TensorFlow와 같은 서로 다른 프레임워크 간의 상호 운용성을 허용하고 모델을 내보내고 가져올 수 있음&lt;/li&gt;
&lt;li&gt;onnxruntime: &lt;br /&gt;ONNX 모델을 위한 고성능 추론 엔진&lt;br /&gt;다양한 플랫폼과 하드웨어를 지원하며 모델의 추론 프로세스를 가속화하는 데 사용할 수 있음&lt;/li&gt;
&lt;li&gt;torch.onnx:&lt;br /&gt;모델을 ONNX 형식으로 내보낼 수 있는 PyTorch 패키지&lt;br /&gt;PyTorch 모델을 ONNX로 변환하기 위한 간단한 API를 제공&lt;br /&gt;모델을 ONNX를 지원하는 다른 프레임워크 또는 플랫폼으로 쉽게 내보낼 수 있음&lt;/li&gt;
&lt;li&gt;Java: &lt;br /&gt;모바일 및 웹 애플리케이션에서 엔터프라이즈 소프트웨어 및 과학 시뮬레이션에 이르기까지 광범위한 애플리케이션을 개발하는 데 널리 사용되는 널리 사용되는 프로그래밍 언어&lt;br /&gt;Weka, Deeplearning4j 및 MLlib와 같은 기계 학습에 사용할 수 있는 라이브러리 및 프레임워크의 대규모 에코시스템 존재&lt;/li&gt;
&lt;li&gt;JavaScript:&lt;br /&gt;주로 웹 애플리케이션 개발에 사용되는 인기 있는 프로그래밍 언어&lt;br /&gt;TensorFlow.js, Brain.js 및 ML.js와 같은 라이브러리의 도움으로 기계 학습 애플리케이션 개발에도 사용할 수 있음&lt;/li&gt;
&lt;li&gt;C#:&lt;br /&gt;주로 Windows 데스크톱 응용 프로그램, 모바일 앱 및 게임 개발에 사용되는 널리 사용되는 프로그래밍 언어&lt;br /&gt;Accord.NET, ML.NET 및 CNTK와 같은 라이브러리의 도움으로 기계 학습 응용 프로그램 개발에도 사용할 수 있음&lt;/li&gt;
&lt;li&gt;ML.NET: &lt;br /&gt;.NET 개발자를 위한 오픈 소스 기계 학습 프레임워크&lt;br /&gt;기계 학습에 대한 전문 지식 없이도 C# 또는 F#을 사용하여 기계 학습 모델을 개발할 수 있음&lt;br /&gt;초보자와 전문가 모두를 위해 설계되었으며 분류, 회귀 및 이상 탐지와 같은 광범위한 기계 학습 작업을 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델을 ONNX로 내보내기(Exporting the model to ONNX)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PyTorch: 기본 ONNX 내보내기 지원&lt;/li&gt;
&lt;li&gt;PyTorch 실행 그래프의 동적 특성(&lt;span style=&quot;color: #374151;&quot;&gt;Dynamic nature of PyTorch execution graph)&lt;/span&gt;:&lt;br /&gt;내보내기 프로세스는 유지되는(persisted) ONNX 모델을 생성하기 위해 실행 그래프를 통과해야 함&lt;/li&gt;
&lt;li&gt;테스트 변수: 내보내기 루틴에 전달, 올바른 크기의 더미 제로 텐서(훈련 데이터 세트의 shape에서 얻을 수 있음)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674235747666&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;input_image = torch.zeros((1,28,28))
onnx_model = 'data/model.onnx'
onnx.export(model, input_image, onnx_model)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테스트 데이터 세트: 예측을 위해 ONNX 모델에서 추론하기 위한 샘플 데이터로 사용&lt;/li&gt;
&lt;li&gt;추론 세션: onnxruntime.InferenceSession으로 생성됨&lt;/li&gt;
&lt;li&gt;추론: 원하는 출력 목록과 입력 값 맵을 전달하여 run() 메서드를 사용하여 ONNX 모델에서 수행됨&lt;/li&gt;
&lt;li&gt;결과: 출력 목록&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674234989506&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;session = onnxruntime.InferenceSession(onnx_model, None)
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name

result = session.run([output_name], {input_name: x.numpy()})
predicted, actual = classes[result[0][0].argmax(0)], classes[y]
print(f'Predicted: &quot;{predicted}&quot;, Actual: &quot;{actual}&quot;')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ONNX 모델: 다양한 플랫폼과 다양한 프로그래밍 언어에서 추론을 실행하는 데 사용할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: 실행 그래프(execution graph), ONNX 내보내기(ONNX export), Persist, model.onnx, onnx.export, onnxruntime.InferenceSession, onnxruntime.InferenceSession.get_inputs(), onnxruntime.InferenceSession.run()&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 그래프(execution graph):&lt;br /&gt;모델이 수행하는 계산을 그래프 기반으로 표현한 것&lt;br /&gt;입력에 대해 수행되는 작업과 실행 순서를 설명함&lt;br /&gt;모델의 성능을 최적화하고 모델을 다른 프레임워크나 플랫폼으로 내보낼 수 있도록 하는 데 사용됨&lt;/li&gt;
&lt;li&gt;ONNX 내보내기(ONNX export):&lt;br /&gt;하나의 프레임워크에서 딥 러닝 모델을 표현하기 위한 개방형 형식인 ONNX 형식으로 모델을 변환하는 프로세스&lt;br /&gt;이를 통해 PyTorch 및 TensorFlow와 같은 서로 다른 프레임워크 간의 상호 운용성을 허용하고 모델을 내보내고 가져올 수 있음&lt;br /&gt;일반적으로 PyTorch의 torch.onnx 패키지를 사용하여 수행됨&lt;/li&gt;
&lt;li&gt;Persist:&lt;br /&gt;나중에 로드하여 사용할 수 있도록 모델의 상태를 파일에 저장하는 프로세스&lt;br /&gt;이를 통해 학습 후 모델을 저장하여 추론 또는 추가 학습에 사용할 수 있음&lt;br /&gt;PyTorch에서 torch.save() 및 torch.load() 함수를 사용하거나 모델에서 state_dict() 및 load_state_dict() 메서드를 사용하여 state_dict를 저장 및 로드함으로써 수행할 수 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;model.onnx: &lt;br /&gt;훈련된 모델을 ONNX 형식으로 저장하기 위한 파일 형식&lt;br /&gt;딥 러닝 모델을 표현하기 위한 개방형 형식으로, PyTorch 및 TensorFlow와 같은 서로 다른 프레임워크 간의 상호 운용성을 허용&lt;/li&gt;
&lt;li&gt;onnx.export:&lt;br /&gt;PyTorch의 torch.onnx 패키지에서 제공하는 함수&lt;br /&gt;PyTorch 모델을 ONNX 형식으로 내보낼 수 있음&lt;br /&gt;&amp;nbsp;모델, 예제 입력 텐서 및 파일 경로를 인수로 사용&lt;br /&gt;모델을 지정된 파일 경로로 내보냄&lt;br /&gt;제공한 코드 스니펫에서 모델은 'data/model.onnx' 파일로 내보내지며 입력 텐서는 모양이 (1, 28, 28)이고 0으로 채워져 있ㅇ,ㅁ&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;onnxruntime.InferenceSession:&lt;br /&gt;ONNX 모델 실행을 위한 세션을 나타내는 ONNX 런타임 라이브러리의 클래스&lt;br /&gt;ONNX 모델을 로드하고, 추론을 위해 준비하고, 모델에서 추론을 실행하는 데 사용됨&lt;br /&gt;ONNX 모델 파일의 경로를 가져와서 모델에서 추론을 실행하는 데 사용할 수 있는 세션 개체를 만듬&lt;/li&gt;
&lt;li&gt;onnxruntime.InferenceSession.get_inputs(): &lt;br /&gt;모델의 입력 텐서 목록을 반환하는 onnxruntime.InferenceSession 클래스의 메서드&lt;br /&gt;모델의 입력 텐서를 가져오고 올바른 형식으로 입력 데이터를 준비하는 데 사용됨&lt;/li&gt;
&lt;li&gt;onnxruntime.InferenceSession.run():&lt;br /&gt;모델에서 추론을 실행하는 onnxruntime.InferenceSession 클래스의 메서드&lt;br /&gt;입력 및 출력 텐서의 이름과 입력 데이터를 받아 출력 데이터를 반환&lt;br /&gt;주어진 입력 데이터로 모델에 대한 추론을 수행하는 데 사용됨&lt;br /&gt;모델에서 생성된 출력 데이터를 반환&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pytorch/튜토리얼</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/133</guid>
      <comments>https://hoohaha.tistory.com/133#entry133comment</comments>
      <pubDate>Sat, 21 Jan 2023 02:47:59 +0900</pubDate>
    </item>
    <item>
      <title>[PyTorch] 공식 문서 Learn the Basics 요약 - 6. Optimization</title>
      <link>https://hoohaha.tistory.com/132</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpXyYO/btrWP9zya9c/iDeaGeONTsY5eMY6e4cEs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpXyYO/btrWP9zya9c/iDeaGeONTsY5eMY6e4cEs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpXyYO/btrWP9zya9c/iDeaGeONTsY5eMY6e4cEs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpXyYO%2FbtrWP9zya9c%2FiDeaGeONTsY5eMY6e4cEs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;246&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 매개변수 최적화(Optimizing the model parameters)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 코드(Prerequisite code)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이퍼파라미터 설정(Setting hyperparameters)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 루프 추가(Add an optimization loop)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실 함수 추가(Add a loss function)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 패스(Optimization pass)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 구현(Full implementation)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;keyword:&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습률(learning rate), 최상의 가중치(best weights), 예측할 수 없는 동작(unpredictable behavior), 지역 최소값(local minima), 전역 최소값(global minima), 최적화 루프(optimization loop), 학습 루프(train loop), 검증 루프(validation loop), 테스트 루프(test loop), 손실 계산(loss calculation), 옵티마이저 단계(optimizer step), 평균 제곱 오차(Mean Square Error, MSE), 음의 로그 우도(Negative Log Likelihood, NLL), 크로스엔트로피 손실(Cross-Entropy Loss, CE), 로짓(logit), 최적화 알고리즘(optimization algorithms), 옵티마이저 객체(optimizer object), SGD(Stochastic Gradient Descent), ADAM, RMSProp, torch.save, 내부 상태 사전(internal state dictionary), state_dict()&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델 매개변수 최적화(Optimizing the model parameters)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델: 훈련, 검증 및 테스트됨&lt;/li&gt;
&lt;li&gt;데이터: 최적화에 사용&lt;/li&gt;
&lt;li&gt;학습: 반복적인 과정 거침&lt;/li&gt;
&lt;li&gt;반복(iteration): epoch(에폭)라고 함&lt;/li&gt;
&lt;li&gt;각 반복에서의 모델의 학습: &lt;br /&gt;출력에 대해 추측&lt;br /&gt;오류(추측과 정답 사이의 차이(손실, loss)) 계산&lt;br /&gt;매개변수와 관련된 오류의 &lt;span&gt;도함수(derivative) 수집&lt;br /&gt;경사하강법(Gradient Descent) 사용하여 매개변수 최적화(optimize)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: model optimization&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 최적화(model optimization):&lt;br /&gt;손실 함수와 같은 스칼라 값 함수를 최소화하기 위해 모델의 매개변수를 조정하는 프로세스&lt;br /&gt;손실 함수의 변화도를 기반으로 매개변수를 업데이트하는 알고리즘인 옵티마이저를 사용하여 수행됨&lt;br /&gt;목표는 최상의 모델 성능을 나타내는 가능한 최저 손실(lowest possible loss)을 초래하는 매개변수 집합을 찾는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 코드(Prerequisite code)&lt;/h3&gt;
&lt;pre id=&quot;code_1674191797769&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;%matplotlib inline
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda

training_data = datasets.FashionMNIST(
    root=&quot;data&quot;,
    train=True,
    download=True,
    transform=ToTensor()
)

test_data = datasets.FashionMNIST(
    root=&quot;data&quot;,
    train=False,
    download=True,
    transform=ToTensor()
)

train_dataloader = DataLoader(training_data, batch_size=64)
test_dataloader = DataLoader(test_data, batch_size=64)

class NeuralNetwork(nn.Module):
    def __init__(self):
        super(NeuralNetwork, self).__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
            nn.ReLU()
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

model = NeuralNetwork()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하이퍼파라미터 설정(Setting hyperparameters)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이퍼파라미터&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정의: 모델 최적화 과정을 제어하는 ​​조절 가능한 매개변수&lt;/li&gt;
&lt;li&gt;영향(impact): 모델 학습 및 정확도 수준, 수렴율(convergence rate)&lt;/li&gt;
&lt;li&gt;학습용으로 정의된 하이퍼파라미터:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Epoch 수: 전체 교육 데이터 세트가 네트워크를 통과하는 횟수&lt;/li&gt;
&lt;li&gt;batch size: 매개변수가 갱신되기 전 신경망을 통해 전파된 데이터 샘플의 수&lt;/li&gt;
&lt;li&gt;iterations(반복수): 한 에폭를 완료하는 데 필요한 배치 수(학습 데이터 수 / 배치 사이즈)&lt;/li&gt;
&lt;li&gt;학습률(learning rate): &lt;br /&gt;각 배치/에폭에서 모델의 매개변수를 조절하는 비율&lt;br /&gt;더 작은 학습률: 학습 속도 느려짐. 모델이 최상의 가중치를 찾는 데 더 오래 걸림. local minima에 빠질 수 있음&lt;br /&gt;더 큰 학습률: 모델이 건너뛰고 최상의 가중치를 놓칠 수 있으며 학습 중에 예측할 수 없는 동작이 발생할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674194629264&quot; class=&quot;ini&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;learning_rate = 1e-3
batch_size = 64
epochs = 5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: learning rate, best weights, unpredictable behavior, local minima, global minima&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습률(learning rate): &lt;br /&gt;최적화 알고리즘의 단계 크기를 제어하는 ​​하이퍼파라미터&lt;br /&gt;각 반복에서 매개변수가 업데이트되는 양을 결정&lt;br /&gt;학습률이 높으면 업데이트가 커지고 수렴이 빨라지지만 모델이 최적의 솔루션을 초과할 수도 있음&lt;br /&gt;학습률이 낮으면 업데이트가 작아지고 수렴이 느려지지만 로컬 미니마에 갇힐 수 있음&lt;/li&gt;
&lt;li&gt;최상의 가중치(best weights): &lt;br /&gt;최상의 모델 성능을 나타내는 가능한 최저 손실(lowest possible loss)을 초래하는 매개변수 집합&lt;br /&gt;옵티마이저의 목표는 손실 함수의 기울기에 따라 매개변수를 업데이트하여 모델에 가장 적합한 가중치를 찾는 것&lt;/li&gt;
&lt;li&gt;예측할 수 없는 동작(unpredictable behavior):&lt;br /&gt;옵티마이저가 최상의 가중치를 찾을 수 없는 경우 모델 최적화 프로세스 중에 예측할 수 없는 동작이 발생할 수 있음&lt;br /&gt;이는 잘못된 하이퍼 매개변수 선택(poor choice of hyperparameter), 잘못 확장된 데이터(poorly scaled data) 또는 복잡하고 고차원적인 문제(complex, high-dimonsional problem)와 같은 여러 요인으로 인해 발생할 수 있음&lt;br /&gt;옵티마이저가 차선의 솔루션이 될 수 있는 로컬 미니멈 또는 안장점(saddle point)에 멈춘 경우에도 발생할 수 있음&lt;/li&gt;
&lt;li&gt;지역 최소값(local minima):&lt;br /&gt;근처의 모든 지점보다 낮은 손실 함수 환경의 한 지점&lt;br /&gt;더 낮은 지점이 있을 수 있음&lt;br /&gt;로컬 최소값으로 수렴하도록 훈련된 모델은 전역 최소값으로 수렴하는 모델보다 성능이 좋지 않음&lt;/li&gt;
&lt;li&gt;전역 최소값(global minima): &lt;br /&gt;전체적으로 가장 낮은 지점인 손실 함수 환경의 지점&lt;br /&gt;전역 최소값으로 수렴하도록 훈련된 모델이 최상의 성능을 발휘&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;최적화 단계 추가(Add an optimization loop)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적화 단계: 모델 학습 및 최적화에 사용&lt;/li&gt;
&lt;li&gt;각 에폭: 두 가지 주요 부분으로 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;훈련 루프: 훈련 데이터 세트를 반복하고 최적의 매개변수로 수렴하려고 시도&lt;/li&gt;
&lt;li&gt;검증/테스트 단계(validation/test loop): 테스트 데이터 세트를 반복하여 모델 성능이 개선되고 있는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;교육 루프에서 사용되는 개념:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;forward pass: 모델이 예측을 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;loss calculation: 예측을 실제 출력과 비교&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;backward pass: 모델 매개변수에 대한 손실의 기울기를 계산&lt;/li&gt;
&lt;li&gt;&lt;b&gt;optimizer step: 계산된 그래디언트를 사용하여 모델 매개변수를 업데이트&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키워드: optimization loop, train loop, validation loop, test loop, generalization performance, loss calculation, optimizer step&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적화 루프(optimization loop):&lt;br /&gt;신경망 학습 과정의 주요 루프&lt;br /&gt;모델을 통해 입력 데이터를 반복적으로 전달하고, 손실을 계산하고, 옵티마이저를 사용하여 모델의 매개변수를 업데이트하는 것으로 구성됨&lt;br /&gt;지정된 반복 횟수 동안 또는 모델 성능이 특정 임계값에 도달할 때까지 반복됨&lt;/li&gt;
&lt;li&gt;학습 루프(train loop):&lt;br /&gt;훈련 데이터에서 모델을 훈련시키는 데 사용되는 특정 유형의 최적화 루프&lt;br /&gt;훈련 루프 동안 훈련 데이터에서 계산된 손실 함수의 기울기를 기반으로 모델의 매개변수가 업데이트됨&lt;/li&gt;
&lt;li&gt;검증 루프(validation loop):&lt;br /&gt;훈련 루프와 유사하지만 검증 데이터 세트에서 모델의 성능을 평가하는 데 사용됨&lt;br /&gt;훈련 중 모델의 성능을 모니터링하고 과적합을 감지하는 데 사용됨&lt;/li&gt;
&lt;li&gt;테스트 루프(test loop):&lt;br /&gt;학습이 완료된 후 테스트 데이터 세트에서 모델의 성능을 평가하는 데 사용됨&lt;br /&gt;모델의 일반화 성능에 대한 추정치를 제공&lt;/li&gt;
&lt;li&gt;일반화 성능(generalization performance):&lt;br /&gt;본 적이 없는 데이터에 대해 모델이 잘 수행할 수 있는 능력&lt;/li&gt;
&lt;li&gt;손실 계산(loss calculation):&lt;br /&gt;모델의 출력과 실제 출력에 대한 스칼라 값 함수를 계산하는 프로세스&lt;br /&gt;모델의 매개변수를 업데이트하는 데 필요한 정보를 제공하므로 최적화 루프에서 중요한 단계&lt;/li&gt;
&lt;li&gt;옵티마이저 단계(optimizer step):&lt;br /&gt;손실 함수의 기울기에 따라 모델의 매개변수를 업데이트하는 프로세스&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;손실 함수 추가(Add a loss function)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습 데이터 제공 시 학습되지 않은 네트워크는 정답을 제공하지 않을 수 있음&lt;/li&gt;
&lt;li&gt;손실 함수: 목표 값에 대한 얻은 결과의 비 유사성(degree of dissimilarity)을 측정, 학습 중 최소화&lt;/li&gt;
&lt;li&gt;손실 계산:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예측: 주어진 데이터 샘플을 모델에 입력&lt;/li&gt;
&lt;li&gt;비교: 실제 데이터 레이블 값과 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;일반적인 손실 함수:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;nn.MSELoss: 회귀 작업에 사용되는 Mean Square Error&lt;/li&gt;
&lt;li&gt;nn.NLLLoss: 분류에 사용되는 음의 로그 우도&lt;/li&gt;
&lt;li&gt;nn.CrossEntropyLoss: &lt;br /&gt;nn.LogSoftmax와 nn.NLLLoss를 합친 로스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;예제에서는 nn.CrossEntropyLoss 사용, 모델의 출력 로짓을 전달하여 로짓을 정규화하고 예측 오류를 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1674191864866&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Initialize the loss function
loss_fn = nn.CrossEntropyLoss()&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: mean square error, negative log likelihood, cross-entropy loss, logits, normalization&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;평균 제곱 오차(Mean Square Error, MSE): &lt;br /&gt;예측 출력과 실제 출력 간의 평균 제곱 차이를 측정하는 스칼라 값 함수&lt;br /&gt;연속 값을 예측하는 것이 목표인 회귀 문제의 손실 함수로 자주 사용됨&lt;br /&gt;이상치에 민감하며 작은 오류보다 큰 오류를 처벌(punish)함&lt;/li&gt;
&lt;li&gt;음의 로그 우도(Negative Log Likelihood, NLL):&lt;br /&gt;예측된 출력에서 ​​실제 출력의 우도를 측정하는 스칼라 값 함수&lt;br /&gt;이산 값을 예측하는 것이 목표인 분류 문제의 손실 함수로 자주 사용됨&lt;br /&gt;음의 로그는 함수를 미분 가능하게 만드는 데 사용됨&lt;br /&gt;음의 부호는 함수를 최소화해야 하는 손실 함수로 만드는 데 사용됨&lt;/li&gt;
&lt;li&gt;크로스엔트로피 손실(Cross-Entropy Loss, CE):&lt;br /&gt;예측된 출력과 실제 출력 간의 차이를 측정하는 스칼라 값 함수&lt;br /&gt;이산 값을 예측하는 것이 목표인 분류 문제의 손실 함수로 자주 사용됨&lt;br /&gt;NLL과 밀접한 관련이 있으며 출력의 확률을 얻기 위해 softmax activation function과 함께 자주 사용됨&lt;/li&gt;
&lt;li&gt;로짓(logit):&lt;br /&gt;활성화 함수가 적용되기 전 모델의 원시 출력&lt;br /&gt;신경망에서 로짓은 softmax 함수가 적용되기 전 마지막 선형 레이어의 출력&lt;br /&gt;로짓은 크로스 엔트로피 손실을 계산할 때 소프트맥스 함수가 ​​나중에 적용되기 때문에 유용&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;최적화 패스(Optimization pass)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적화: 각 학습 단계에서 모델 오류를 줄이기 위해 모델 매개변수를 조정하는 프로세스&lt;/li&gt;
&lt;li&gt;최적화 알고리즘: 최적화 프로세스 수행 방법 정의(이 예에서는 Stochastic Gradient Descent가 사용됨)&lt;/li&gt;
&lt;li&gt;옵티마이저 객체: 모든 최적화 로직을 캡슐화&lt;/li&gt;
&lt;li&gt;SGD 옵티마이저: 이 예에서 사용되며 다른 옵션에는 ADAM 및 RMSProp 등이 있음&lt;/li&gt;
&lt;li&gt;옵티마이저 초기화: 학습할 모델의 매개변수 및 학습률을 하이퍼파라미터로 전달하여 시행&lt;/li&gt;
&lt;li&gt;학습 단계(loop)에서의 최적화: 3단계
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;optimizer.zero_grad(): 모델 매개변수의 그래디언트를 재설정. 그래디언트는 기본적으로 합산(accumulate)되기에 명시적으로 0으로 초기화 필요&lt;/li&gt;
&lt;li&gt;loss.backwards(): 예측 손실(prediction loss)을 역전파. PyTorch는 각 매개변수에 대해 손실 변화도를 저장&lt;/li&gt;
&lt;li&gt;optimizer.step(): 역전파 패스에서 수집된 그래디언트로 매개변수를 조정&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674191874373&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: optimization algorithms, optimizer object, SGD, ADAM, RMSProp&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적화 알고리즘(optimization algorithms):&lt;br /&gt;손실 함수와 같은 스칼라 값 함수를 최소화하기 위해 모델의 매개변수를 조정하는 데 사용되는 방법&lt;br /&gt;일반적인 최적화 알고리즘에는 SGD(Stochastic Gradient Descent), Adam 및 RMSProp이 포함됨&lt;br /&gt;각 알고리즘에는 학습 프로세스를 제어하는 ​​학습 속도와 같은 고유한 하이퍼 매개변수 세트가 있음&lt;/li&gt;
&lt;li&gt;옵티마이저 객체(optimizer object):&lt;br /&gt;모델의 매개변수를 업데이트하는 데 사용되는 PyTorch의 SGD, Adam 또는 RMSProp과 같은 최적화 알고리즘의 인스턴스&lt;br /&gt;모델의 매개변수를 원하는 하이퍼 매개변수와 함께 알고리즘의 생성자(constructor)에 전달하여 옵티마이저 객체를 생성할 수 있음&lt;/li&gt;
&lt;li&gt;SGD(Stochastic Gradient Descent):&lt;br /&gt;손실 함수의 음의 기울기 방향으로 단계를 진행하여 모델의 매개변수를 업데이트하는 간단한 최적화 알고리즘&lt;br /&gt;계산적으로 효율적이며 광범위한 최적화 문제에 사용할 수 있지만 학습률 선택에 민감&lt;/li&gt;
&lt;li&gt;ADAM:&lt;br /&gt;과거 그래디언트 정보를 기반으로 각 매개변수의 학습률을 조정하는 최적화 알고리즘&lt;br /&gt;이전 단계의 그래디언트 정보를 사용하여 단계 크기를 조정하므로 학습률 선택에 더욱 강건해짐&lt;/li&gt;
&lt;li&gt;RMSProp:&lt;br /&gt;&amp;nbsp;과거 그래디언트 정보를 기반으로 각 매개변수의 학습률을 조정하는 최적화 알고리즘&lt;br /&gt;그래디언트의 제곱의 이동 평균을 사용하여 단계 크기를 조정하므로 학습률 선택에 더 강건해짐&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 구현(Full implementation)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;train_loop: 최적화 코드를 반복하여 수행&lt;/li&gt;
&lt;li&gt;test_loop: 테스트 데이터로 모델의 성능 측정&lt;/li&gt;
&lt;li&gt;모델 학습 단계
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;손실 함수 정의&lt;/li&gt;
&lt;li&gt;옵티마이저 초기화(모델의 매개변수 및 러닝레이트 전달)&lt;/li&gt;
&lt;li&gt;에폭 수 정의 후 train_loop, test_loop 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성능 좋지 않을 시 epoch, learning_rate 등 조정 가능. 또는 모델이 적합하지 않을 수 있음. 이후 비전 문제에 대해 다룰 것&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674191906618&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def train_loop(dataloader, model, loss_fn, optimizer):
    size = len(dataloader.dataset)
    for batch, (X, y) in enumerate(dataloader):        
        # Compute prediction and loss
        pred = model(X)
        loss = loss_fn(pred, y)
        
        # Backpropagation
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if batch % 100 == 0:
            loss, current = loss.item(), batch * len(X)
            print(f&quot;loss: {loss:&amp;gt;7f}  [{current:&amp;gt;5d}/{size:&amp;gt;5d}]&quot;)


def test_loop(dataloader, model, loss_fn):
    size = len(dataloader.dataset)
    test_loss, correct = 0, 0

    with torch.no_grad():
        for X, y in dataloader:
            pred = model(X)
            test_loss += loss_fn(pred, y).item()
            correct += (pred.argmax(1) == y).type(torch.float).sum().item()
            
    test_loss /= size
    correct /= size
    print(f&quot;Test Error: \n Accuracy: {(100*correct):&amp;gt;0.1f}%, Avg loss: {test_loss:&amp;gt;8f} \n&quot;)
    
    loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

epochs = 10
for t in range(epochs):
    print(f&quot;Epoch {t+1}\n-------------------------------&quot;)
    train_loop(train_dataloader, model, loss_fn, optimizer)
    test_loop(test_dataloader, model, loss_fn)
print(&quot;Done!&quot;)


Epoch 1
-------------------------------
loss: 2.307260  [    0/60000]
loss: 2.305284  [ 6400/60000]
loss: 2.293966  [12800/60000]
loss: 2.291592  [19200/60000]
loss: 2.288022  [25600/60000]
loss: 2.259277  [32000/60000]
loss: 2.277950  [38400/60000]
loss: 2.252569  [44800/60000]
loss: 2.238333  [51200/60000]
loss: 2.239141  [57600/60000]
Test Error: 
 Accuracy: 27.5%, Avg loss: 0.035050 

Epoch 2
-------------------------------
loss: 2.222609  [    0/60000]
loss: 2.244805  [ 6400/60000]
loss: 2.209550  [12800/60000]
loss: 2.227453  [19200/60000]
loss: 2.217051  [25600/60000]
loss: 2.162092  [32000/60000]
loss: 2.206926  [38400/60000]
loss: 2.151579  [44800/60000]
loss: 2.117667  [51200/60000]
loss: 2.143689  [57600/60000]
Test Error: 
 Accuracy: 38.9%, Avg loss: 0.033368 

Epoch 3
-------------------------------
loss: 2.102783  [    0/60000]
loss: 2.154025  [ 6400/60000]
loss: 2.076486  [12800/60000]
loss: 2.124048  [19200/60000]
loss: 2.107713  [25600/60000]
loss: 2.014179  [32000/60000]
loss: 2.090220  [38400/60000]
loss: 1.989485  [44800/60000]
loss: 1.933911  [51200/60000]
loss: 2.002917  [57600/60000]
Test Error: 
 Accuracy: 41.2%, Avg loss: 0.030885 

Epoch 4
-------------------------------
loss: 1.926293  [    0/60000]
loss: 2.019496  [ 6400/60000]
loss: 1.888668  [12800/60000]
loss: 1.987653  [19200/60000]
loss: 1.968171  [25600/60000]
loss: 1.838344  [32000/60000]
loss: 1.951870  [38400/60000]
loss: 1.808960  [44800/60000]
loss: 1.749038  [51200/60000]
loss: 1.868777  [57600/60000]
Test Error: 
 Accuracy: 44.4%, Avg loss: 0.028537 

Epoch 5
-------------------------------
loss: 1.754023  [    0/60000]
loss: 1.889865  [ 6400/60000]
loss: 1.724985  [12800/60000]
loss: 1.880932  [19200/60000]
loss: 1.852289  [25600/60000]
loss: 1.703095  [32000/60000]
loss: 1.850078  [38400/60000]
loss: 1.679640  [44800/60000]
loss: 1.618462  [51200/60000]
loss: 1.781099  [57600/60000]
Test Error: 
 Accuracy: 46.4%, Avg loss: 0.026904 

Epoch 6
-------------------------------
loss: 1.629323  [    0/60000]
loss: 1.794621  [ 6400/60000]
loss: 1.609603  [12800/60000]
loss: 1.806047  [19200/60000]
loss: 1.771073  [25600/60000]
loss: 1.610854  [32000/60000]
loss: 1.782800  [38400/60000]
loss: 1.593032  [44800/60000]
loss: 1.530435  [51200/60000]
loss: 1.721836  [57600/60000]
Test Error: 
 Accuracy: 47.5%, Avg loss: 0.025738 

Epoch 7
-------------------------------
loss: 1.541017  [    0/60000]
loss: 1.723998  [ 6400/60000]
loss: 1.525540  [12800/60000]
loss: 1.745950  [19200/60000]
loss: 1.714844  [25600/60000]
loss: 1.542636  [32000/60000]
loss: 1.735072  [38400/60000]
loss: 1.529822  [44800/60000]
loss: 1.467118  [51200/60000]
loss: 1.675812  [57600/60000]
Test Error: 
 Accuracy: 48.3%, Avg loss: 0.024844 

Epoch 8
-------------------------------
loss: 1.474333  [    0/60000]
loss: 1.669000  [ 6400/60000]
loss: 1.460421  [12800/60000]
loss: 1.694097  [19200/60000]
loss: 1.674764  [25600/60000]
loss: 1.487773  [32000/60000]
loss: 1.699166  [38400/60000]
loss: 1.481064  [44800/60000]
loss: 1.419311  [51200/60000]
loss: 1.638599  [57600/60000]
Test Error: 
 Accuracy: 48.7%, Avg loss: 0.024137 

Epoch 9
-------------------------------
loss: 1.420322  [    0/60000]
loss: 1.625176  [ 6400/60000]
loss: 1.408073  [12800/60000]
loss: 1.649715  [19200/60000]
loss: 1.644693  [25600/60000]
loss: 1.443653  [32000/60000]
loss: 1.671596  [38400/60000]
loss: 1.443777  [44800/60000]
loss: 1.382555  [51200/60000]
loss: 1.608089  [57600/60000]
Test Error: 
 Accuracy: 49.1%, Avg loss: 0.023570 

Epoch 10
-------------------------------
loss: 1.375013  [    0/60000]
loss: 1.588062  [ 6400/60000]
loss: 1.364595  [12800/60000]
loss: 1.612044  [19200/60000]
loss: 1.621220  [25600/60000]
loss: 1.407904  [32000/60000]
loss: 1.649211  [38400/60000]
loss: 1.415225  [44800/60000]
loss: 1.353849  [51200/60000]
loss: 1.582835  [57600/60000]
Test Error: 
 Accuracy: 49.5%, Avg loss: 0.023104 

Done!&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 저장(Saving Models)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 성능 만족 시 torch.save 사용하여 저장 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pytorch 모델은 state_dict라는 internal state dictionary에 매개변수 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;hese can be persisted(유지) with the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;torch.save&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;method:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674229236921&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;torch.save(model.state_dict(), &quot;data/model.pth&quot;)

print(&quot;Saved PyTorch Model State to model.pth&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keyword: torch.save, internal state dictionary, state_dict&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;torch.save:&lt;br /&gt;모델의 매개변수와 옵티마이저의 상태를 포함하여 PyTorch 모델의 상태를 저장하는 데 사용되는 함수&lt;br /&gt;나중에 torch.load 기능을 사용하여 로드할 수 있는 파일에 모델을 저장&lt;/li&gt;
&lt;li&gt;내부 상태 사전(internal state dictionary):&lt;br /&gt;모델의 매개변수 및 옵티마이저의 상태를 포함하여 PyTorch 모델의 현재 상태를 포함하는 Python 사전&lt;br /&gt;이 사전은 모델이나 옵티마이저의 state_dict() 함수를 사용하여 액세스할 수 있음&lt;/li&gt;
&lt;li&gt;state_dict():&lt;br /&gt;모델 또는 옵티마이저의 학습 가능한 모든 매개변수를 포함하는 정렬된 사전을 반환하는 함수&lt;br /&gt;torch.save 함수를 사용하여 모델의 현재 상태를 저장하거나 torch.load 함수를 사용하여 사전 훈련된 모델을 로드하는 데 사용할 수 있음&lt;br /&gt;키는 매개변수의 이름&lt;br /&gt;값은 해당 매개변수 값을 포함하는 텐서&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Pytorch/튜토리얼</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/132</guid>
      <comments>https://hoohaha.tistory.com/132#entry132comment</comments>
      <pubDate>Fri, 20 Jan 2023 17:16:14 +0900</pubDate>
    </item>
    <item>
      <title>[PyTorch] 공식 문서 Learn the Basics 요약 - 5. Automatic differentiation with torch.autograd</title>
      <link>https://hoohaha.tistory.com/131</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kWmtN/btrWNaydhRB/1iJ2UU0c6M3hVomrY1gDZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kWmtN/btrWNaydhRB/1iJ2UU0c6M3hVomrY1gDZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kWmtN/btrWNaydhRB/1iJ2UU0c6M3hVomrY1gDZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkWmtN%2FbtrWNaydhRB%2F1iJ2UU0c6M3hVomrY1gDZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;246&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;torch.autograd를 사용한 자동 미분(Automatic differentiation with torch.autograd)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tensor, Function과 연산 그래프(Tensors, Functions and Computational graph)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변화도 계산하기(Computing gradients)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변화도 추적 멈추기(Disabling gradient tracking)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산 그래프에 대한 추가 정보(more on Computational Graphs)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택적으로 읽기: 텐서 변화도와 야코비안 곱(Optional Reading: Tensor gradients and jacobian products)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keywords: backpropagation, gradient, loss function, retraining, gradient descent, differentiation engine, computational graph, class Function in pytorch, forward direction, requires_grad property, grad_fn property, forward pass, backward pass, &amp;part;loss/&amp;part;w, &amp;part;loss/&amp;part;b, loss.backward(), w.grad, b.grad, leaf nodes, root node, backward call, retain_graph=True, torch.no_grad() block, gradient tracking, frozen parameter, fine tuning, autograd, directed acyclic graph, chain rule, dynamic graph, control flow statements, computation vs operation, cycle vs loop, scalar loss function, Jacobian matrix, vector function, Jacobian product, shape vs size on tensor, scalar-valued function, optimizer&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;torch.autograd를 사용한 자동 미분(Automatic differentiation with torch.autograd)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역전파: 신경망 훈련에 가장 자주 사용되는 알고리즘&lt;br /&gt;손실 함수의 &lt;b&gt;변화도(gradient)&lt;/b&gt;에 따라 매개변수(모델 가중치)를 조정&lt;br /&gt;&lt;b&gt;네트워크를 통해 역방향으로 이동하여 가중치와 편향을 조정하여 모델을 재훈련&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;손실 함수: 신경망의 예상 출력과 실제 출력 간의 차이를 계산&lt;br /&gt;목표: 손실 함수를 0으로 최소화하는 것&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;경사하강법(gradient descent): &lt;b&gt;손실을 줄이기 위해 시간이 지남에 따라 모델을 재훈련(retraining)&lt;/b&gt;하는 프로세스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;PyTorch에는 그래디언트 계산을 위한 torch.autograd라는 미분 엔진이 내장되어 있음&lt;/li&gt;
&lt;li&gt;다음과 같이 간단한 1계층 신경망 입력 x, 매개변수 w 및 b, 손실 함수를 사용하여 정의할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674109244986&quot; class=&quot;makefile&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch

x = torch.ones(5)  # input tensor
y = torch.zeros(3)  # expected output
w = torch.randn(5, 3, requires_grad=True)
b = torch.randn(3, requires_grad=True)
z = torch.matmul(x, w)+b
loss = torch.nn.functional.binary_cross_entropy_with_logits(z, y)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keywords: backpropagation, gradient, loss function, retraining, gradient descent, differentiation engine, computational graph&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;backpropagation:&lt;br /&gt;신경망을 훈련하는 데 사용되는 알고리즘으로, 각 계층에서 오류를 계산하고 그에 따라 가중치를 업데이트하는 데 사용됨&lt;/li&gt;
&lt;li&gt;gradient:&lt;br /&gt;gradient descent과 같은 최적화 알고리즘에 사용되는 &lt;b&gt;함수의 가장 급격한 증가(steepest increse)의 방향과 크기를 나타내는 벡터&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;loss function:&lt;br /&gt;모델을 최적화하는 데 사용되는 함수&lt;br /&gt;신경망에서 예측된 출력과 실제 출력 간의 오차 또는 차이를 측정하는 데 사용되는 함수&lt;/li&gt;
&lt;li&gt;retraining:&lt;br /&gt;성능을 향상시키기 위해 새로운 데이터에 대해 모델을 다시 훈련시키는 과정&lt;/li&gt;
&lt;li&gt;gradient descent:&lt;br /&gt;gradient의 반대 방향으로 weights를 조정하여 신경망에서 loss function을 최소화하는 데 사용되는 최적화 알고리즘&lt;/li&gt;
&lt;li&gt;differentiation engine: &lt;br /&gt;신경망의 다양한 연산에 대한 gradients를 계산하는 구성 요소(component)&lt;br /&gt;backpropagation을 위한 gradients를 계산하는 데 사용됨&lt;/li&gt;
&lt;li&gt;computational graph:&lt;br /&gt;&lt;b&gt;수학적 계산의 그래프 표현&lt;br /&gt;&lt;/b&gt;&lt;span&gt;신경망에서 backpropagation하는 동안 gradients를 효율적으로 계산하는 데 사용됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tensor, Function과 연산 그래프(Tensors, Functions and Computational graph)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q3qY7/btrWIzle7I1/4MQLZo6qlvVGmrOwXSjbLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q3qY7/btrWIzle7I1/4MQLZo6qlvVGmrOwXSjbLK/img.png&quot; data-alt=&quot;위 코드로부터 정의된 computational graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q3qY7/btrWIzle7I1/4MQLZo6qlvVGmrOwXSjbLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq3qY7%2FbtrWIzle7I1%2F4MQLZo6qlvVGmrOwXSjbLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1008&quot; height=&quot;347&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 코드로부터 정의된 computational graph&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 신경망에서는 매개변수 w와 b를 최적화해야 하고 기울기를 계산해야 함&lt;/li&gt;
&lt;li&gt;그래디언트를 계산하려면 텐서의 requires_grad 속성 설정 필요&lt;/li&gt;
&lt;li&gt;계산 그래프를 구성하기 위해 텐서에 적용되는 함수: Function 클래스의 개체&lt;/li&gt;
&lt;li&gt;함수 개체는 순방향으로 함수를 계산하는 방법과 역방향 전파 중에 도함수를 계산하는 방법 알고 있음&lt;/li&gt;
&lt;li&gt;역방향 전파 함수에 대한 참조(reference)는 텐서의 grad_fn 속성에 저장됨&lt;/li&gt;
&lt;li&gt;텐서를 생성할 때(requires_grad=True 파라미터) 또는 나중에 x.requires_grad_(True) 메서드를 사용하여 requires_grad 값을 설정할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674110701968&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print('Gradient function for z =',z.grad_fn)
print('Gradient function for loss =', loss.grad_fn)

Gradient function for z = &amp;lt;AddBackward0 object at 0x00000280CC630CA0&amp;gt;
Gradient function for loss = &amp;lt;BinaryCrossEntropyWithLogitsBackward object at 0x00000280CC630310&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keywords: class Function in pytorch, forward direction, requires_grad property, grad_fn property, forward pass, backward pass&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;class 'Function' in pytorch:&lt;br /&gt;신경망의 모든 작업에 대한 기본 클래스로 단일 정방향 계산을 나타냄&lt;/li&gt;
&lt;li&gt;forward direction:&lt;br /&gt;일반적으로 입력에서 출력으로 신경망에서 계산이 수행되는 방향&lt;/li&gt;
&lt;li&gt;require_grad property:&lt;br /&gt;PyTorch 텐서의 속성&lt;br /&gt;역방향 전달(backward pass) 중에 텐서에 대한 그래디언트를 계산해야 하는지 여부를 나타냄&lt;/li&gt;
&lt;li&gt;grad_fn property:&lt;br /&gt;텐서를 생성한 함수를 참조하는 PyTorch 텐서의 속성&lt;br /&gt;그래디언트를 계산하기 위해 backward pass에 사용됨&lt;/li&gt;
&lt;li&gt;forward pass:&lt;br /&gt;입력이 주어진 신경망의 출력을 계산하는 프로세스&lt;br /&gt;입력 텐서로 시작하여 계산 그래프의 Function 클래스에 의해 정의된 일련의 작업을 적용하여 한 작업의 출력을 다음 작업의 입력으로 전달&lt;br /&gt;forward pass의 결과는 일반적으로 loss 함수를 계산하는 데 사용되는 출력 텐서&lt;/li&gt;
&lt;li&gt;backward pass:&lt;br /&gt;모델의 매개변수에 대한 loss 함수의 그래디언트를 계산하는 프로세스&lt;br /&gt;일반적으로 loss 텐서인 루트 노드에서 시작하여 chain rule of differentiation을 적용하여 계산 그래프의 모든 텐서에 대한 그래디언트를 계산&lt;br /&gt;그래디언트는 텐서의 grad 속성에 저장되며 옵티마이저를 사용하여 모델의 매개변수를 업데이트하는 데 사용할 수 있음&lt;br /&gt;backward pass는 루트 텐서에서 backward() 메서드를 호출하여 수행됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;class '&lt;a href=&quot;https://pytorch.org/docs/stable/autograd.html#function&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Function&lt;/a&gt;' in pytorch 상세&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PyTorch의 Function 클래스는 신경망에서 계산을 만들고 표현하기 위한 기본 빌딩 블록입니다. 행렬 곱셈 또는 비선형 활성화 함수와 같은 특정 연산의 정방향 계산을 정의하는 데 사용됩니다. 또한 그래디언트를 계산하기 위해 역방향 패스에서 사용되는 계산의 입력 및 출력 텐서에 대한 정보를 보유합니다.&lt;br /&gt;사용자는 Function을 서브클래싱하고 입력 텐서에서 수행되는 계산을 정의하고 출력 텐서를 반환하는 전달 메서드를 구현하여 새 작업을 정의할 수 있습니다. 입력 텐서에 대한 기울기를 계산하는 역방향 방법은 autograd 패키지를 사용하여 PyTorch에 의해 자동으로 정의됩니다.&lt;br /&gt;신경망에서 계산이 수행되면 PyTorch는 해당 Function 클래스의 인스턴스를 생성하고 전달 메서드를 호출합니다. 순방향 메서드에서 반환된 출력 텐서는 grad_fn 속성과 연결되어 있어 PyTorch가 계산을 추적하고 역방향 패스 중에 그래디언트를 계산할 수 있습니다.&lt;br /&gt;또한 기본적으로 PyTorch에 의해 생성된 모든 텐서에는 require_grad=False가 있습니다. 즉, 이 텐서에 대한 그래디언트는 역방향 패스 중에 계산되지 않습니다. 그러나 텐서에 require_grad=True를 설정하면 그래디언트가 계산되어 텐서를 역방향 전달에 사용할 수 있고 사용자가 최적화 프로그램을 사용하여 모델의 매개변수를 업데이트할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The Function class in PyTorch is a fundamental building block for creating and representing computations in a neural network. It is used to define the forward computation of a specific operation, such as a matrix multiplication or a non-linear activation function. It also holds information about the input and output tensors of the computation, which are used in the backward pass to compute gradients.&lt;br /&gt;A user can define a new operation by subclassing Function and implementing the forward method, which defines the computation performed on the input tensors and returns the output tensors. The backward method, which computes gradients with respect to the input tensors, is automatically defined by PyTorch using the autograd package.&lt;br /&gt;When a computation is performed in a neural network, PyTorch creates an instance of the corresponding Function class and calls its forward method. The output tensors returned by the forward method are associated with the grad_fn property, which allows PyTorch to trace the computation and compute gradients during the backward pass.&lt;br /&gt;It is also worth noting that, by default, all tensors created by PyTorch have requires_grad=False, which means that gradients with respect to these tensors will not be computed during the backward pass. However, by setting requires_grad=True on a tensor, gradients will be computed, allowing the tensor to be used in the backward pass and allowing the user to update the model's parameters using the optimizer.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변화도 계산하기(Computing gradients)&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신경망에서 매개변수의 가중치를 최적화하려면 매개변수에 대한 손실 함수의 도함수 계산 필요&lt;/li&gt;
&lt;li&gt;이를 위해서는 x 및 y의 일부 고정 값에 대해 &amp;part;loss/&amp;part;w 및 &amp;part;loss/&amp;part;b 계산 필요&lt;/li&gt;
&lt;li&gt;이러한 도함수를 계산하기 위해 loss.backward() 메서드가 호출됨&lt;/li&gt;
&lt;li&gt;이후 w.grad 및 b.grad에서 값 검색 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1674111250888&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;loss.backward()
print(w.grad)
print(b.grad)

tensor([[0.2739, 0.0490, 0.3279],
        [0.2739, 0.0490, 0.3279],
        [0.2739, 0.0490, 0.3279],
        [0.2739, 0.0490, 0.3279],
        [0.2739, 0.0490, 0.3279]])
tensor([0.2739, 0.0490, 0.3279])&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기울기(gradient, grad 속성)는 require_grad 속성이 True로 설정된 계산 그래프의 리프 노드에만 사용할 수 있음&lt;/li&gt;
&lt;li&gt;그래프의 다른 노드에는 그라디언트를 사용할 수 없음&lt;/li&gt;
&lt;li&gt;backward를 사용한 기울기 계산은 성능상의 이유로 지정된 그래프에서 한 번만 수행할 수 있음&lt;/li&gt;
&lt;li&gt;동일한 그래프에서 여러 개의 backward 호출(calls)이 필요한 경우 retain_graph=True 매개변수를 backward 호출에 전달해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키워드: &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;part;loss/&amp;part;w, &amp;part;loss/&amp;part;b, loss.backward(), w.grad, b.grad, leaf nodes, root node, backward call, retain_graph=True&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;loss/&amp;part;w, &amp;part;loss/&amp;part;b:&lt;br /&gt;각각 weight 및 bias 변수에 대한 손실 함수의 편도함수(partial derivatives)&lt;br /&gt;weight 또는 bias의 작은 변화(small change)에 대한 손실 함수의 변화를 나타냄&lt;/li&gt;
&lt;li&gt;loss.backward():&lt;br /&gt;PyTorch에서 손실 변수(loss variable)로 표시되는 계산의 입력 텐서에 대한 그래디언트를 계산하는 데 사용되는 메서드&lt;br /&gt;loss variable의 grad_fn 속성과 연결된 Function 클래스의 backward 메서드로 계산된 그래디언트를 사용함&lt;br /&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151;&quot;&gt; It uses the gradients computed by the backward method of the &lt;/span&gt;Function&lt;span style=&quot;background-color: #f7f7f8; color: #374151;&quot;&gt; class associated with the &lt;/span&gt;grad_fn&lt;span style=&quot;background-color: #f7f7f8; color: #374151;&quot;&gt; property of the loss variable.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;w.grad, b.grad:&lt;br /&gt;&lt;span&gt;각각 weight 및 bias 변수의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기울기&lt;br /&gt;역방향 패스 후 PyTorch에 의해 자동으로 계산됨&lt;br /&gt;옵티마이저를 사용하여 가중치 및 편향 변수를 업데이트하는 데 사용할 수 있음&lt;/li&gt;
&lt;li&gt;leaf node: &lt;br /&gt;하위 노드가 없는 계산 그래프의 텐서&lt;br /&gt;그래프에 대한 입력 텐서이며 일반적으로 require_grad=True를 가짐&lt;/li&gt;
&lt;li&gt;root node:&lt;br /&gt;backward pass가 시작되는 텐서&lt;br /&gt;일반적으로 loss 텐서이며 forward pass의 마지막 연산&lt;/li&gt;
&lt;li&gt;backward call: &lt;br /&gt;backward() call은 루트 노드에서 시작하여 계산 그래프의 모든 텐서에 대한 그래디언트를 계산하는 데 사용됨&lt;br /&gt;그래프를 역방향으로 탐색하고 미분의 연쇄 법칙(chain rule)을 사용하여 그래디언트를 계산&lt;/li&gt;
&lt;li&gt;retain_graph=True:&lt;br /&gt;backward() 메서드에 전달할 수 있는 선택적 매개변수&lt;br /&gt;기본적으로 retain_graph=False는 백워드 패스 후에 그래프가 해제됨을 의미&lt;br /&gt;retain_graph=True이면 그래프가 유지되고 다른 역방향 전달에 사용될 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변화도 추적 멈추기(Disabling gradient tracking)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본적으로, require_grad=True인 텐서는 계산 기록을 추적하고 그래디언트 계산을 지원&lt;/li&gt;
&lt;li&gt;학습된 모델을 입력 데이터에 적용만 하는 순전파 연산만 필요한 경우와 같이 추적 및 그래디언트 계산이 필요하지 않은 경우 존재&lt;/li&gt;
&lt;li&gt;이러한 경우 코드를 torch.no_grad() 블록으로 둘러싸서 추적 중지할 수 있음&lt;/li&gt;
&lt;li&gt;detach() 메소드도 동일하게 추적 중지할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674114411661&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;z = torch.matmul(x, w)+b
print(z.requires_grad)

with torch.no_grad():
    z = torch.matmul(x, w)+b
print(z.requires_grad)

z = torch.matmul(x, w)+b
z_det = z.detach()
print(z_det.requires_grad)

True
False
False&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변화도 추적을 멈춰야 하는 이유들&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신경망의 일부 매개변수를 고정으로 표시(frozen parameter)&lt;br /&gt;이는 &lt;a href=&quot;https://tutorials.pytorch.kr/beginner/finetuning_torchvision_models_tutorial.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;사전 훈련된 네트워크를 미세 조정하기 위한 일반적인 시나리오&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;그래디언트 추적이 없는 텐서에 대한 계산이 더 효율적이기 때문에 순방향 패스만 수행할 때 계산 속도 향상&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keywords: &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;torch.no_grad() block, gradient tracking, frozen parameter, fine tuning&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;torch.no_grad() block:&lt;br /&gt;그래디언트 추적을 일시적으로 비활성화하는 PyTorch에서 제공하는 컨텍스트 관리자&lt;br /&gt;그래디언트 추적이 비활성화되면 포워드 패스가 평소와 같이 수행됨&lt;br /&gt;그러나 그래디언트가 계산되지 않고 텐서의 grad 속성이 업데이트되지 않음&lt;br /&gt;그래디언트가 필요하지 않을 때 계산 속도를 높이고 메모리를 절약하는 데 유용할 수 있음&lt;/li&gt;
&lt;li&gt;gradient tracking:&lt;br /&gt;backward pass 동안 모델의 매개변수와 관련하여 loss 함수의 기울기를 계산하고 저장하는 프로세스&lt;br /&gt;PyTorch의 autograd 패키지에 의해 수행되며 requires_grad=True인 모든 텐서에 대해 기본적으로 활성화&lt;/li&gt;
&lt;li&gt;frozen parameter: &lt;br /&gt;기울기 추적이 비활성화된 매개변수&lt;br /&gt;backward pass 중에 업데이트할 수 없음&lt;br /&gt;require_grad=False를 설정하거나 매개변수를 torch.no_grad() 블록 내부에 배치하여 수행할 수 있음&lt;/li&gt;
&lt;li&gt;fine tuning:&lt;br /&gt;새로운 작업에 대해 사전 훈련된 모델을 훈련하거나 업데이트하는 프로세스&lt;br /&gt;고정된 매개변수의 일부 또는 전부를 고정 해제하고 훈련 중에 업데이트하여 수행할 수 있음&lt;br /&gt;사전 훈련된 모델이 새 작업에 유용한 기능을 학습했고 이 지식을 활용하여 성능을 향상시키려는 경우에 유용&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;연산 그래프에 대한 추가 정보(more on Computational Graphs)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;autograd
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DAG에 데이터(텐서) 기록&lt;/li&gt;
&lt;li&gt;DAG에 실행된 모든 연산들(결과 텐서 생성 포함) 기록&lt;/li&gt;
&lt;li&gt;방향성 비순환 그래프(DAG): Function 객체로 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;잎(leaves): 입력 텐서&lt;/li&gt;
&lt;li&gt;뿌리(root): 결과 텐서&lt;/li&gt;
&lt;li&gt;그래프 추적: 체인 규칙을 사용하여 변화도 자동 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;순전파 단계(forward pass):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요청된 연산 수행: 결과 텐서를 계산&amp;nbsp;&lt;/li&gt;
&lt;li&gt;변화도 기능(gradient function): DAG에서 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;역전파 단계(backward pass):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.backward()가 DAG 루트에서 호출될 때 시작&lt;/li&gt;
&lt;li&gt;변화도 계산: 각 .grad_fn에서&lt;/li&gt;
&lt;li&gt;변화도 누적(accumulate): 각 텐서의 .grad 속성에서&lt;/li&gt;
&lt;li&gt;전파(propagate): 체인 규칙을 사용하여 잎(leaf) 텐서까지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PyTorch의 DAG: 동적(dynamic)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래프 재생성(recreate) 및 채움(populate): 각 .backward() 호출 후 처음부터&lt;/li&gt;
&lt;li&gt;모델에서 제어 흐름(control flow) 문 허용됨&lt;/li&gt;
&lt;li&gt;모양(shape), 크기(size), 연산(operation): 모든 반복(iteration)에서 변경될 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키워드: autograd, directed acyclic graph, chain rule, dynamic graph, allowing control flow statements, computation vs operation, cycle vs loop&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Autograd: &lt;br /&gt;텐서의 모든 작업에 대한 자동 미분를 제공하는 PyTorch 모듈&lt;br /&gt;신경망의 backward pass 중에 변화도를 계산하는 데 사용되어 훈련 중에 변화도를 효율적으로 계산할 수 있음&lt;/li&gt;
&lt;li&gt;Directed Acyclic Graph(DAG):&lt;br /&gt;edge가 방향을 가져 방향이 있는 그래프를 형성하는 일종의 그래프 데이터 구조&lt;br /&gt;cycle이나 loop가 없음&lt;/li&gt;
&lt;li&gt;연쇄 법칙(chain rule):&lt;br /&gt;합성 함수의 도함수는 구성 함수의 도함수를 곱하여 계산할 수 있다는 미적분학의 기본 개념&lt;br /&gt;신경망에서 체인 규칙은 네트워크의 각 계층에 규칙을 반복적으로 적용하여 역방향 통과 중에 기울기를 계산하는 데 사용됨&lt;/li&gt;
&lt;li&gt;동적 그래프(dynamic graph):&lt;br /&gt;동적으로 변경될 수 있는 그래프&lt;br /&gt;즉, 런타임 중에 그래프가 변경될 수 있음&lt;br /&gt;더 많은 유연성을 허용하고 네트워크의 순방향 전달에서 루프 및 조건문과 같은 제어 흐름 문을 사용할 수 있게 함&lt;/li&gt;
&lt;li&gt;제어 흐름 문 허용(allowing control flow statement):&lt;br /&gt;Pytorch는 동적 그래프 기능을 사용하여 네트워크의 순방향 전달에서 제어 흐름 문을 사용할 수 있음&lt;br /&gt;이를 통해 더 복잡한 신경망 아키텍처를 만들 수 있지만 계산 그래프가 더 복잡해지고 성능에 영향을 미칠 수 있음&lt;/li&gt;
&lt;li&gt;&amp;nbsp;computation vs operation:&lt;br /&gt;computation은 최종 출력을 생성하기 위해 텐서에서 수행되는 sequence of operations&lt;br /&gt;신경망에서의 layer 및 activation function 등을 통한 forward pass&lt;br /&gt;operation은 행렬곱, non-linear activation function과 같은 computation의 단일 단계&lt;/li&gt;
&lt;li&gt;cycle vs loop&lt;br /&gt;cycle은 동일한 노드를 여러 번 방문할 수 있는 그래프의 닫힌 경로&lt;br /&gt;loop는 특정 조건이 실행될 때까지 반복적으로 실행되는 일련의 명령&lt;br /&gt;DAG 맥락에서 cycle은 동일한 노드로의 재방문을 의미, 비주기적이므로 DAG에서 허용되지 않음 -&amp;gt; Q) RNN에서는?&lt;br /&gt;&lt;span&gt;DAG 맥락에서&lt;span&gt; loop는 forward pass 중 발생하는 계산의 반복을 의미&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-&amp;gt; Q) RNN에서는?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;선택적으로 읽기: 텐서 변화도와 야코비안 곱(Optional Reading: Tensor gradients and jacobian products)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스칼라 손실 함수: 일부 매개변수에 대한 기울기&lt;/li&gt;
&lt;li&gt;출력 함수가 임의의(arbitrary) 텐서인 경우 있음&lt;/li&gt;
&lt;li&gt;PyTorch: Jacobian 곱 계산. 실제 gradient 아님&lt;/li&gt;
&lt;li&gt;벡터 함수: y = f(x), 여기서 x = &amp;lt;x1, ..., xn&amp;gt; 및 y = &amp;lt;y1, ..., ym&amp;gt;&lt;/li&gt;
&lt;li&gt;x에 대한 y의 기울기: Jacobian 행렬, Jij = &amp;part;yi/&amp;part;xj&lt;/li&gt;
&lt;li&gt;Jacobian 행렬: 직접 계산되지 않음&lt;/li&gt;
&lt;li&gt;jacobian 곱: 주어진 입력 벡터 v = (v1 ... vm)에 대한 vT&amp;sdot;J&lt;/li&gt;
&lt;li&gt;backward 함수: v를 인수로 사용하여 호출&lt;/li&gt;
&lt;li&gt;v의 크기(size): 곱을 계산하려고 하는 원래 텐서의 크기와 같아야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1674184923503&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;inp = torch.eye(5, requires_grad=True)
out = (inp+1).pow(2)
out.backward(torch.ones_like(inp), retain_graph=True)
print(f&quot;First call\n{inp.grad}&quot;)
out.backward(torch.ones_like(inp), retain_graph=True)
print(f&quot;\nSecond call\n{inp.grad}&quot;)
inp.grad.zero_()
out.backward(torch.ones_like(inp), retain_graph=True)
print(f&quot;\nCall after zeroing gradients\n{inp.grad}&quot;)


tensor([[4., 2., 2., 2., 2.],
        [2., 4., 2., 2., 2.],
        [2., 2., 4., 2., 2.],
        [2., 2., 2., 4., 2.],
        [2., 2., 2., 2., 4.]])

Second call
tensor([[8., 4., 4., 4., 4.],
        [4., 8., 4., 4., 4.],
        [4., 4., 8., 4., 4.],
        [4., 4., 4., 8., 4.],
        [4., 4., 4., 4., 8.]])

Call after zeroing gradients
tensor([[4., 2., 2., 2., 2.],
        [2., 4., 2., 2., 2.],
        [2., 2., 4., 2., 2.],
        [2., 2., 2., 4., 2.],
        [2., 2., 2., 2., 4.]])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 인자로 backward 두 차례 호출하면 변화도 값 달라짐&lt;/li&gt;
&lt;li&gt;pytorch가 backward propagation 수행 시 변화도를 누적하기 때문에 발생&lt;/li&gt;
&lt;li&gt;계산 그래프의 모든 리프 노드의 grad 속성에 더해짐&lt;/li&gt;
&lt;li&gt;적절한 변화도 계산을 위해 grad 속성을 0으로 만들어야 함&lt;/li&gt;
&lt;li&gt;옵티마이저: 실제 학습 시 grad 속성을 0으로 만드는 데 도와줌&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;backward() 함수: 위 코드에서 매개변수 없이 호출됨&lt;/li&gt;
&lt;li&gt;backward(torch.tensor(1.0)) 호출과 동일&lt;/li&gt;
&lt;li&gt;신경망 훈련 중 loss와 같은 스칼라 값 함수의 변화도 계산에 유용함&lt;/li&gt;
&lt;li&gt;키워드: 역전파, Pytorch, 그래디언트, 누산, 옵티마이저, 스칼라 값 함수, 신경망 훈련.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keywords: scalar loss function, &lt;span&gt;Jacobian matrix, vector function,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Jacobian product, shape vs size on tensor, scalar-valued function, optimizer&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스칼라 손실 함수(Scalar Loss Function): &lt;br /&gt;&amp;nbsp;모델의 예측값과 정답값을 취하여 이들 사이의 불일치(discrepancy, 차이)를 측정 후 스칼라 값을 반환하는 함수&lt;br /&gt;예) Mean Squared Error, Binary Cross-Entropy&lt;br /&gt;모델의 예측 출력과 실제 출력 간의 차이를 최소화하여 신경망을 훈련하는 데 사용됨&lt;/li&gt;
&lt;li&gt;자코비안 행렬(Jacobian matrix):&lt;br /&gt;벡터 함수의 모든 1차 편미분 행렬&lt;br /&gt;신경망에서는 모델의 매개변수에 대한 손실 함수의 기울기를 계산하는 데 사용됨&lt;br /&gt;신경망의 역방향 통과 동안 기울기를 계산하는 데 사용되는 자동 미분의 기본 개념&lt;/li&gt;
&lt;li&gt;&lt;span&gt;벡터 함수(vector function):&lt;br /&gt;하나 이상의 입력을 받아 벡터 출력을 반환하는 함수&lt;br /&gt;신경망에서 모델의 정방향 전달(forward pass)은 입력이 벡터이고 출력도 벡터인 벡터 함수로 생각할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;자코비안 곱(Jacobian Product): &lt;br /&gt;자코비안 행렬과 벡터의 곱&lt;br /&gt;자코비안 행렬은 벡터 함수의 모든 1계 편도함수의 행렬&lt;br /&gt;벡터는 그래디언트가 계산되는 방향&lt;br /&gt;특정 방향의 입력에 대한 함수의 기울기를 계산하는 데 사용됨&lt;/li&gt;
&lt;li&gt;Tensor의 모양 대 크기(shape vs size):&lt;br /&gt;PyTorch에서 Tensor는 다차원 배열&lt;br /&gt;텐서의 모양은 텐서의 각 차원의 크기를 나타내는 튜플&lt;br /&gt;텐서의 크기는 모양의 곱인 텐서의 총 요소 수&lt;br /&gt;예) 텐서의 모양이 (2,3)이라면 크기는 6&lt;br /&gt;모양은 데이터의 구조를 이해하는 데 유용&lt;br /&gt;크기는 데이터의 양을 이해하는 데 유용&lt;/li&gt;
&lt;li&gt;스칼라 값 함수(scalar-valued function):&lt;br /&gt;하나 이상의 입력을 받아 단일 스칼라 출력을 반환하는 함수&lt;br /&gt;머신러닝에서 cost 또는 loss function을 나타내 신경망을 훈련하는 데 사용됨&lt;/li&gt;
&lt;li&gt;옵티마이저(optimizer): &lt;br /&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;손실 함수와 같은 스칼라 값 함수를 최소화하기 위해 모델의 매개변수를 조정하는 데 사용되는 알고리즘&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;예) Stochastic Gradient Descent(SGD), Adam, Adagrad&lt;br /&gt;&lt;/span&gt;learning rate 등의 ​​자체 하이퍼 매개변수 세트 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Pytorch/튜토리얼</category>
      <author>대두코기</author>
      <guid isPermaLink="true">https://hoohaha.tistory.com/131</guid>
      <comments>https://hoohaha.tistory.com/131#entry131comment</comments>
      <pubDate>Fri, 20 Jan 2023 12:45:38 +0900</pubDate>
    </item>
  </channel>
</rss>