안녕하세요 선생님 얼마전 머신러닝 완벽가이드 강좌에 소프트맥스 질문 드렸던 사람입니다. 저는 소프트맥스 연산에 대한 하드웨어 가속기 설계 연구를 진행하고 있는 석사 과정생입니다. 그 때 남겨주셨던 답변에 대해 답을 드리면, Softmax의 Input 정밀도라는 것은, 마지막 FC layer를 통과한 후, Softmax층의 input으로 들어가는 값에 몇 bit를 할당할 것이냐에 관한 내용입니다. 즉 제가 알고 싶은 내용을 다시 정리해보면 다음과 같습니다. softmax의 input (혹은 output도)에 많은 bit가 할당되면, H/W resource가 커지게 되므로, 모델의 accuracy를 크게 저해하지 않는 수준에서 어느 정도의 정밀도를 유지해야 하는지 알고 싶습니다. 하여 모델에서 softmax input 전에 따로 텐서 안의 값들을 특정 소수점 자리에서 반올림 해주는 함수를 정의해 반올림을 거치거나, 기존의 FP32를 FP16으로 casting을 거치도록 하여 좀 더 낮은 정밀도에서 잘 돌아가는 지 시뮬레이션을 해보는 중이었습니다. 저의 시뮬레이션 내용은 아래에 첨부하겠습니다. (rounding의 경우는 텐서 안의 값들이 제대로 반올림이 안된 것인지, 아니면 다른 이유가 있는 것인지.. 소수점 10번째에서 rounding을 하든, 20번째, 30번째에서 하든 accuracy에 큰 변화가 없고 거의 36프로 정도를 보였습니다.) 또 일반적으로 H/W설계 시에 floating point보다 fixed point가 구현이 훨씬 간단하며, 리소스 사용량이 매우 적은데, 소프트웨어적으로 모델을 학습시킬 때의 데이터는 대부분 float 32 또는 float 64를 이용하는 것 같습니다. 이는 역전파 과정에서 높은 정밀도가 필요하기 때문이 아닐까 싶은데, 모델 학습 시에 fixed point를 사용했을 때 발생할 수 있는 문제점이 있을까요 ? (소수점 10째자리에서 반올림을 하든, 20,30째자리에서 반올림을 하든 이론상으로는 정밀도가 높아질수록 accuracy가 높아져야 될 것 같은데 제 시뮬레이션 상으로는 모두 36프로의 정확도를 보여 코드에 문제가 있는 것인지, 아니면 알고리즘적으로 문제가 있는 것인지 궁금합니다.) 또한, FP16으로 표현 가능한 최대 정밀도의 값들이 훈련 시에 자주 사용되는지, 실제로 필요한 수준의 정밀도인지 궁금합니다. softmax 층의 input으로 들어가는 logit값(?)들의 range가 어느 정도인지도 궁금합니다. 아마 모델과 사용하는 데이터에 따라 크게 달라질 것 같기는 한데, 제가 읽었던 softmax accelerator관련 논문들에서는 일반적으로 softmax의 input의 range를 [-10,10]으로 가정을 했습니다. (알고리즘 분야가 아닌 하드웨어 논문들이기는 합니다..ㅠㅠ) 허나 실제 학습 시에 floating point를 사용한다는 것은 분명 logit값이 10보다 매우 큰 값이기 때문일 것 같은데 왜 논문들에서는 저런 범위를 가정했는지 궁금하여 든 생각이 혹시 practical한 모델 내에서는 softmax로 들어가기 전에 특정 범위 안으로 들어가도록 전 처리를 해주는 layer가 따로 있는 것인지 궁금했습니다. 또 학습이 점점 진행되면서 logit 값이 학습 후반부로 갈수록 일반적으로 수렴하는 분포(?)가 있는 것인지 궁금합니다.. (epoch별로 logit 값을 출력해보고 싶은데, 아직 코딩에 익숙치 않아 난항을 겪고 있습니다) 본질적으로 softmax를 사용하는 이유가 궁금합니다.. multi classification에서 결국 하나의 class로 분류하는 것이 목적인데, 그러면 최종 logit값들 중 가장 큰 값을 선택하면 되는데 왜 굳이 softmax를 통해 확률 분포를 만든 후에 가장 높은 확률의 class로 선택하는지가 궁금합니다. (어차피 softmax를 취한 후의 maximum이나 취하기 전의 maximum이나 같을텐데) ( 시뮬레이션 내용 ) 지난 번의 코드는 깃헙에서 임의로 가져온 코드라 조금 더 제대로 된 코드로 실습하고자 이번에는 선생님의 강의 자료인 VGG_Practice 실습 코드를 이용했습니다. 실습 코드의 모델 정의 부분에서 소프트 맥스 layer 직전에 rounding, 혹은 casting하는 부분을 추가한 것 외에 달라진 점은 없습니다. 그림 1: float 16 그림 2. float 16 결과 그림 3. rounding (소수점 10째자리에서 반올림) 그림 4. rounding 결과 회로 설계 관련 연구를 진행하다 보니 AI 알고리즘에 대한 지식이 부족하여 다소 난해하게 질문드리게 된 점 정말 죄송합니다.. 또 하드웨어적 관점에서 생각하다보니 알고리즘 부분과는 다소 동떨어진 질문이 있을 수도 있을 것 같은데, 그런 부분이 있다면 죄송합니다 ㅠㅠ 몇 년전, 동아리 활동을 하면서 머신러닝에 관심을 갖게 되어 선생님의 강의를 수강하고, 잘 공부했었던 기억이 있어 이렇게 다시 찾아 질문 드리게 되었습니다. 긴 내용 읽어주셔서 감사드립니다..
한입 잘라먹는 NEXT.JS 강좌 풀라우트 캐시 2 4분 30초 쯤에 Suspense 를 사용하여 next run build 를 하는 과정이 있습니다 그런데 Type error: Type '{ searchParams: { q?: string | undefined; }; }' does not satisfy the constraint 'PageProps'. Types of property 'searchParams' are incompatible. Type '{ q?: string | undefined; }' is missing the following properties from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag] 32 | 33 | // Check the prop type of the entry function > 34 | checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>() | ^ 35 | 36 | // Check the arguments and return type of the generateMetadata function 37 | if ('generateMetadata' in entry) { 계속 이런 에러가 발생해서 구글링 해서 찾아보면 components 및 해당 app 폴더 안에 중첩되는 page.tsx 나 layout.tsx 가 존재하면 이러한 에러가 발생할수도 있다고 하여 각 폴더 마다 파일명을 변경하고 계속 빌드를 시도했지만 에러문구는 해결이 되지않고 있네요... 위의 사진은 제가 현재 문제가 발생하고 있는 프로젝트의 전체 폴더 및 파일 구조입니다. 어디가 문제일까요...ㅠ 답변 부탁드리겠습니다.
안녕하세요 강사님 좋은 강의 감사드립니다. 몇 가지 헷갈리는 점이 있어 질문드립니다. React (CSR)에서는 js Bundle시 요청 페이지 뿐만 아니라 모든 페이지의 자바스크립트 파일과 컴포넌트들을 불러오는 반면, Next (SSR)에서는 js Bundle시 모든 페이지가 아닌 요청페이지의 파일과 컴포넌트들을 불러온다. 제가 이해한 게 맞을까요? 2. 프리 페칭 시점은 js bundle후 -> 페이지에 접속한 후 -> "프리페칭" 이 시점이 맞을까요? (프리페칭 시점에 현재 페이지에서 이동할 수 있는 모든 페이지들의 자바스크립트를 사전에 불러온다.) 3. next에서 js bundle시 요청페이지의 파일을 불러온다고 했는데, 요청페이지의 파일은 _app.tsx를 기준으로 하나요?
import sys import copy #sys.stdin=open("input.txt","rt") ''' #3번이 틀림 n =int(input()) li1 = [list(map(int, input().split())) for _ in range(n)] cpy =copy.deepcopy(li1) #깊은 카피를 사용 m=int(input()) tot=s=0 e = n #print(cpy) #li1 회전 for i in range(m): li2 = list(map(int, input().split())) print(li2) if li2[1] == 0: #왼쪽으로 회전 for j in range(n): if j-li2[2] < 0: li1[li2[0]-1][j-li2[2]+n] = cpy[li2[0]-1][j] else: li1[li2[0]-1][j-li2[2]] = cpy[li2[0]-1][j] if li2[1] == 1: #오른쪽으로 회전 for j in range(n): if j+li2[2] < n: li1[li2[0]-1][j+li2[2]] = cpy[li2[0]-1][j] else: li1[li2[0]-1][(j+li2[2])%n] = cpy[li2[0]-1][j] #print(li1) for i in range(n): for j in range(s,e): tot += li1[i][j] if i < n//2: s+=1 e-=1 else: s-=1 e+=1 print(tot) 다음과 같이 풀때, 1245번은 정답이 뜨는데 3번만 틀린ㄴ값으로 뜹니다.. 뭐가 틀린지 모르겠습니다..알려주세요..
안녕하세요. 수강생 입니다. 좋은 강의 잘 수강하면서 열심히 공부하고 있습니다. 노션 페이지 내용 관련으로 문의드립니다. [입문] 시작은 프리캠프 - 섹션 3 CSS의 기본과 싸이월드 실습 1 CSS 사용방법 3가지 예시 이미지 중 해당 내용들에 대한 이미지가 이상해 문의 남깁니다. 감사합니다.
안녕하세요. 저는 login.ui.py 파일이 생성되지 않아 문의 드립니다. 아래 캡켜화면은 저의 VScode입니다. 강의에서 06.GUI프로그래밍을 프로젝트폴더로 선택한 상태에서 아래의 터미널에 입력(pyside6-uic login.ui -o login_ ui.py)을 하였으나 에러문구가 뜹니다. 제가 무엇을 잘못했는지 궁금합니다. 감사합니다. ================================================================ 강의 노트에 아래의 문구가 있어 다시 문의드립니다. (문의사항) 확장프로그램(Qt for Python)은 이제 설치하지 않아도 되는가요? 터미널에서 명령이 실행을 제가 올바르게 한건지 확인 부탁드립니다.
5번만 틀렸는데, 어느부분에서 틀렸는지 모르겠습니다.. 알려주세요 .. 아래는 제가 짠 코드입니다 n = int(input()) max = -1 tot,tto = 0,0 li = [[0]*n for _ in range(n)] # n의 크기를 가지고 0으로초기화된 리스트를 n번 반복 for i in range(n): li[i]= list(map(int, input().split())) for i in range(n): if sum(li[i]) > max: max = sum(li[i]) for j in range(n): for i in range(n): tot += li[i][j] tot = 0 if tot > max: max = tot for i in range(n): tot += li[i][i] tto += li[i][n-i-1] if tot > max: max = tot if tto > max: max = tto print(max)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. RISS의 주제저를 추출하는 부분에서 파이썬을 이용한 크롤링은 잘 되었습니다. 하지만 크롤링한 데이터를 보니 웹에는 표시되지 않는 문자들이 같이 출력되었습니다. 저만 이런 문자가 추가로 붙었는지 궁금해서 강사님의 강의도 보니 강사님의 강의에서도 똑같이 추출한 데이터에서 문자가 추가된 것을 확인할 수 있었습니다. 마지막 줄에 AI하고 \u3000 이라는 문자가 추가되었는데 외주를 할 때 이런 오류는 문제가 되지 않는지 궁금합니다.
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요?: 1-5 알고리즘과 친해지기 (2) 어떤 알고리즘을 학습하고 계신가요?: 최빈값 찾기(알파벳) 여기까지 이해하신 내용은 무엇인가요?: 'a' -> ord('a') -> 97 -> chr(97) -> 'a' 이고, 'A' -> ord('A') -> 65 -> chr(65) -> 'A' 이다. 아스키 코드를 활용하고, 가장 기본이 되는 원리는 이렇다. 0이 26개인 배열(a_o_a)을 만들고, 주어진 문자열(string)을 반복문으로 순회한다. (for char in string: ... ) ord('a') - ord('a') = 0 이고, ord('b') - ord('a') = 1 이고, ... 이 원리에 따라 ord(char) - ord('a') 를 하면, char가 몇 번째 순서의 알파벳인지 구할 수 있다. 이를 0이 26개인 배열(a_o_a)의 인덱스(i)로 활용한다. string을 반복문으로 순회하면서, (만약 숫자나 띄어쓰기가 아니고 알파벳이라면) a_o_a[i] += 1 을 한다. a_o_a 에 각 알파벳의 빈도수가 저장이 된다. a_o_a를 반복문으로 순회하면서, max_alphabet_index를 구한다. chr(max_alphabet_index + ord('a')) 을 하면 최종적으로 최다 빈도수인 알파벳이 구해진다. 2. 어려움을 겪는 부분 저는 string.count(char)를 이용하여 풀었습니다. 그런데 이 아스키 코드 원리를 활용한 알고리즘이 많이 출제되나요? 코테 출제하시는 분들께서 아스키 코드를 활용한 로직을 더 선호하시는지 궁금합니다!
파이썬 decimal() 함수를 모르는 상태에서 if i == '0' or i == '1' or i == '2' or i == '3' or i == '4' or i == '5' or i == '6' or i == '7' or i == '8' or i == '9': tmp+=i int(tmp) 이렇게 코드를 짰다고 했을때 ValueError: invalid literal for int() with base 10: 오류가 뜹니다.. 숫자만 골라서 int 형변환 했는데 왜 오류가 뜰까요..?
안녕하세요 강사님 강의 잘 보고 있습니다 다름이 아니라 특정 조건에서 task가 실행되지 않아 해결방법을 묻고자 글을 남깁니다. task가 실행되지 않고 발생하는 log *** Could not read served logs: Invalid URL 'http://:8793/log/dag_id=dags_get_data_python_operator/run_id=manual__2024-12-20T09:11:57.447383+00:00/task_id=refine_data_/attempt=1.log': No host supplied branch에 따른 dag에 작성한 taskflow는 다음과 같습니다 get_data_ >> check_dir_ >> get_yesterday_data_ >> refine_data_ >> delete_data get_data_ >> check_dir_ >> refine_data_ >> delete_data batch 당일 데이터와 전날 데이터를 이용해서 spark를 이용해 정제하는 작업인데, 전날 데이터가 수집되어있지 않다면 수집하고나서 sparksubmit을 하도록 task를 구성했습니다. 전날 데이터가 없는 상태로 dag를 실행하면 전체task가 잘 실행이되고 전날데이터가 존재한다면 원하는 task 까지 skipped이 되고 해당 log가 나오네요 ㅠㅠ task 플로우를 잘못 작성한 이유일까요 ? 추가) BranchPython task에 찍힌 log 입니다.
Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14)
강의를 듣다가 궁금한 점이 생겨서 질문드립니다. 브라우저에서 실행되는 코드에서는 브라우저 클라이언트를 사용하고, 서버에서 실행되는 코드에서는 서버 클라이언트를 사용합니다. - [ Creating a Supabase client for SSR ]( https://supabase.com/docs/guides/auth/server-side/creating-a-client?queryGroups=framework&framework=nextjs&queryGroups=environment&environment=client#create-a-client ) @supabase/ssr 라이브러리를 사용해서 2가지 유형의 클라이언트를 생성합니다. 클라이언트 컴포넌트 클라이언트(createBrowerClient) - 브라우저에서 실행되는 클라이언트 컴포넌트에서 Supabase에 접근 서버 컴포넌트 클라이언트(createServerClient) - 서버에서만 실행되는 서버 컴포넌트, 서버 액션 및 라우트 핸들러에서 Supabase에 접근 서버 컴포넌트로 동작하는 page 컴포넌트에서 각 클라이언트를 사용해 번갈아 API 호출을 해봤는데 동일하게 작동하는 것 같았습니다. 서버 컴포넌트에서 Supabase의 클라이언트/서버 클라이언트가 동작하는 방식의 차이가 있는지, 렌더링 방식에 차이가 있는지 궁금합니다. 서버와 클라이언트 개념과 렌더링 방식(SSR, CSR)이 자꾸 혼동되어 헷갈리네요.. import { getTodos as getTodosClient } from '@/apis/todos'; import { getTodos as getTodosServer } from '@/actions/todos'; export default async function page() { const todos = await getTodos...(); } // todos.ts import { createBrowserSideClient } from "@/lib/client/supabase"; export const getTodos = async() => { const supabase = await createBrowserSideClient(); const result = await supabase.from("todos").select("*"); return result.data; } // todos.action.ts import { createServerSideClient } from "@/lib/server/supabase"; export const getTodos = async() => { const supabase = await createServerSideClient(); const result = await supabase.from("todos").select("*"); return result.data; }
04 : 08 안녕하세요. C언어로 입력받고 출력하기 문제 - 1 에서 교재의 문제 하단 답에 왜 printf("두 숫자를 입력하세요: ") 이후의 출력이 두 숫자를 입력하세요: 5 10 5 + 10 = 15 (이하 생략) 로 출력되는지 궁금합니다. printf("두 숫자를 입력하세요: ") 의 경우 개행 문자가 없기 때문에 두 숫자를 입력하세요: 5 105 + 10 = 15 이런식으로 붙어서 출력되어야 하는게 아닌가요? 기초적인 질문입니다만, 답변 부탁드립니다. 감사합니다.