안녕하세요 강의 잘 보고있습니다. cnt = members.find({"email": email}).count() 관련해서 질문이 있는데요, 저번 강의에서도 find().count()에 버전 관련 오류가 발생했었고 이번에도 당연히 [AttributeError: 'Cursor' object has no attribute 'count’] 오류가 발생했는데요, 그래서 구글링을 통해 cnt = members.collection.estimated_document_count({"email": email}) if cnt > 0: flash("중복된 이메일 주소입니다.") return render_template("join.html") collection.estimated_document_count({"email": email}) 를 찾아서 적용했고 커서 오류를 해결했습니다. 이렇게 회원가입 db를 members로 잘 넘겼는데요, 이메일 주소 중복 부분에서 시크릿키 적용을 한 후에도 이메일이 중복돼도 회원가입이 되고 db가 넘어가더라구요. 그래서 또 구글링을 했고 cnt = members.count_documents({"email": email}) if cnt > 0: flash("중복된 이메일 주소입니다.") return render_template("join.html") count_documents({"email": email}) 코드로 문제 해결을 하기는 했는데요, 여기서 'count_documents'와 'collection.estimated_document_count'의 차이를 알고싶습니다. 아무리 찾아봐도 차이점을 못찾겠어요. 차이점 알려주시면 감사하겠습니다 ! 부탁드려요 !
4r강 마지막에 연산자 적용관련하여 df[df.b == 7] | df[df.a == 5] 라고 코드를 똑 같이 했는데 unsupported operand type(s) for |: 'float' and 'bool' 라고 오류메세지가 나옵니다. 왜이렇게 나오는지가 궁금합니다.
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
안녕하세요. 강사님 현재 강사님 강의 듣고 있는 수강생 입니다. Python의 패키지 매니저 PIP 명령어 정리와 사용 해당 파트 에서 0:30초에 나오는 필수적인 명령어 정리되어 있는 페이지가 강사님 git 에서 보이지 않아서요. 어디서 찾아 볼 수 있는 것 인가요 ? 확인 부탁드리겠습니다. 감사합니다.
안녕하세요 강사님, 항상 좋은 수업 잘 듣고있습니다. mmdetection으로 Mask-RCNN + Resnet-101 model Training중 Training Dataset 구성 관련하여 질문있습니다. 제가 기존 model을 학습시키는데 사용된 모든 이미지 데이터는 1280x720 해상도였습니다. 그러나 이번에 수집한 데이터는 2208x1242 해상도입니다. Q1. 각기 다른 해상도로 촬영된 이미지들을 하나의 데이터셋으로 만들고, 네트워크에 학습시켜도 문제가 없을까요? 당연히 COCO dataset이나 PASCAL dataset을 살펴봐도 다양한 해상도의 이미지를 annotation하여 구성하였기 때문에 문제될 건 없다고 생각하는데 일반적으로, 1280x720 해상도 이미지를 추론하는 경우, 동일한 해상도의 데이터셋으로 학습된 모델이 성능이 더 우수한지 궁금해서요. ex) 1280x720 이미지 추론시, 1280x720 해상도만으로 이루어진 데이터셋으로 학습된 model 사용 1920x1080 이미지 추론시, 1920x1080 해상도만으로 이루어진 데이터셋으로 학습된 model 사용 2208x1242 이미지 추론시, 2208x1242 해상도만으로 이루어진 데이터셋으로 학습된 model 사용 만약 일반적으로 이렇게 한다면, 새로 획득한 데이터가 아닌 라벨링되지 않은 1280x720해상도 데이터들을 더 annotation 작업 진행하려 합니다.
강의 노트 작성이 안되어서 여기에 적습니다. 참고하세요. [보충] 1. 제가 강의에서 메모리를 운영체제에게 반납한다라고 간단하게 말씀드리고 있는데 내부적으로는 조금 더 복잡하고 오해의 여지도 있어서 추가적으로 설명을 드리겠습니다. 일단, 운영체제가 우리의 프로그램에게(보다 구체적으로는 process에게) 메모리를 줄 때는 가상 메모리(virtual memory)라는 개념을 사용합니다. 이때 우리의 컴퓨터에 꽂혀있는 실제 메모리 카드를 사용할지 아니면 (다른 프로그램이 메모리를 쓰고 있어서 실제 메모리 카드의 용량이 부족한 경우에) 하드디스크 같은 다른 저장공간을 사용할지는 OS와 연관된 문제가 됩니다. 우리 프로그램이 받은 메모리가 만약 실제 메모리 카드가 아니라 하드디스크를 가상 메모리로 받은 것이라면 아무래도 처리 속도가 느려지겠지요. C언어의 free()에 대해서 검색하다 보면 " 메모리를 운영체제에게 반납하지 않는다 "라는 얘기가 나옵니다. 제가 사용한 "운영체제에게 반납한다"라는 표현과 반대로 보이지만 사실은 같은 얘기입니다. 운영체제 입장에서는 당장 다른데 쓸 일이 없으면 "혹시 네가 다시 필요할 수도 있으니까 가상 메모리 는 일단 가지고 있어"라는 라면서 그냥 둔다는 의미입니다. 그렇지만 실제 메모리 는 운영체제가 다른 프로그램에게 쓰라고 줘버렸을 수도 있습니다. C에서는 free()한 메모리를 다시 사용하지 말라고 신신 당부를 하는데요, 만약에 정말로 프로그램이 실제 메모리를 계속 가지고 있는 거라면 주의하라고 할 이유가 없겠죠. 정리하겠습니다. 저는 여러분께 보다 쉽게 설명드리기 위해서 운영체제가 메모리를 다른데 쓸 수 있다는 의미에서 반납했다라고 말씀을 드렸고 그 의미를 조금 더 설명드렸습니다. 다른 프로그래머들과 의사소통을 하실 때에는 "메모리를 반납했다"라는 표현보다는 "메모리를 해제(deallocate)" 했다라는 표현을 더 많이 사용합니다. 참고자료1 . "Even if the pages are still remaining in the ownership of this process, but not being used, the actual RAM can be used by another process. So it's not a big deal if the pages haven't been released for some time." 참고자료2. Learn C The Hard Way p 80, "you use free to return it to the OS so that it can be used by other programs." 참고자료3 . "the memory could have been returned to the operating system (a "page" of memory that you're no longer using can be removed from your address space, so there is no longer any memory available at that address - essentially an unused "hole" in your application's memory)." "This is why it is important to make sure you don't use a pointer after freeing the memory it points at."
코드 실행 후 두가지 여쭤보고 싶은 것이 있어 질문 드려봅니다. 1.먼저 train, validation 데이터셋으로 학습을 시켜보았습니다. 혹시 test dataset은 train, validation 데이터 이외의 학습시키지 않은 데이터로 결과를 확인하면 되나요? test dataset는 말그대로 test의 의미를 가지는 데이터셋 일까요?(loss나 accuracy를 구해볼 수 있을까요?) 2.현재 CPU는 Intel core i9, GPU는 RTX 2080 Ti를 사용중에 있고, 하나의 이미지에서 모델 검출속도가 약 0.08s 나오고 있습니다. Window에서 사용중에 있고,그래픽카드 4개를 사용하려고 했지만, 멀티 gpu를 사용하게 되면 sh 파일을 사용해야되는 것으로 알고있고,window에서 sh 파일이 실행되지 않는 것을 확인했습니다. 0.05s 이하로 검출시간을 줄이는 것이 목적이고, 그래픽카드 성능을 보면 RTX 3090이 약 2배정도 뛰어난 성능을 나타낸다고 나와있는데 그래픽카드를 바꾸면 속도가 목표 속도까지 향상이 될까요? 혹은 sh 파일을 window에서 실행시켜서 멀티 gpu를 사용할 수 있을까요? 감사합니다.
안녕하세요. 강의 잘 수강하고 있습니다. 현재 mask rcnn-ballon 데이터셋 학습을 진행중입니다. 주석에서 train, val, test dataset 환경 파라미터가 있다고 나와있는데, train, validation 데이터 이외의 test 데이터셋은 어디에서 확인할 수 있는지 알 수 있을까요? 감사합니다.
test case 2 번의 경우 10 3 6 5 8 5 6 8 7 6 6 7 로 주어지는데 주어진 수의 리스트를 정렬하면 [5 5 6 6 6 6 7 7 8 8] 이 되고 이분 탐색 알고리즘에 의해 해를 구하면 최소 크기가 23일때 [5 5 6 6],[6 6 7],[7 8 8] 을 만족하므로 주어진 output인 24가 아닌 23이 정답이라고 생각했는데 어느 부분에서 잘못생각하였는지 궁금합니다.
안녕하세요, 강의를 잘보고 잘 이해하고 있다고 생각하고 진행하고 있습니다만, 의문점이 생겼습니다. 8비트 정수의 범위를 설명해주실 때 부호가 있는(signed) 정수일 경우 범위를 -128 ~ 127로 표현해주셨는데요. 분명 128의 숫자는 2진수로 표현하였을 때 1000 0000이 맞습니다. 이걸 알려주신 '2의 보수' 표현법으로 -128을 나타내면 1000 0000 -> 0111 1111 이 되고 +1을 하면 1000 0000가 됩니다만 앞선 설명에서는 첫번째 비트공간을 음수,양수를 판별하기 위해 사용되는 자리라고 설명해주셔서 그렇게 생각하고 있었습니다만 이렇게 될 경우 8비트 이니까 128의 2진수인 1000 0000에서 맨앞에 1이 부호를 표현하는 자리이기 때문에 짤리고 000 0000 으로 표현되는 것 이 아닌가요? 그렇게 되면 "부호가 있는 정수"의 범위일 경우 000 0000 ~ 111 1111(127)이 된다는 건데 뭔가 이상하고 그렇다고 1000 0000 을 -0으로 치부해 버리면 0을 '2의 보수' 계산법을 통해 계산하였을 경우 똑같이 -0 이나 0이나 같은 0000 0000 값이 나와서 이상하고 그냥 -128의 경우 +128이나 -128이나 2진수가 같기 때문에 이럴경우는 1000 0000 일때 000 0000 이여도 -128로 정해둔 것 인가요? 아니면 다른 이유가 있을까요?
h를 무조건 0~99로 설정하기보다는 미리 높이의 min 값과 max값을 구한 후 min~max 범위로 for 문을 돌려주면 더 효율적인 풀이가 될 것 같습니다. from collections import deque N = int(input()) graph = [list(map(int,input().split())) for _ in range(N)] min_rain = 99999999 max_rain = -1 # 높이의 min,max 구해주기 for row in graph: min_tmp = min(row) max_tmp = max(row) if min_tmp < min_rain: min_rain = min_tmp if max_tmp > max_rain: max_rain = max_tmp dr = [1,0,-1,0] dc = [0,1,0,-1] ans = 0 for rain in range(min_tmp+1,max_rain): visited = [[0 for _ in range(N)] for _ in range(N)] cnt = 0 for rr in range(N): for cc in range(N): if visited[rr][cc] == 0 and rain < graph[rr][cc] : visited[rr][cc] = 1 q = deque() q.append((rr,cc)) while q: r,c = q.popleft() for i in range(4): nr = r + dr[i] nc = c + dc[i] if 0 <= nr < N and 0 <= nc < N and visited[nr][nc] == 0 and rain < graph[nr][nc]: visited[nr][nc] = 1 q.append((nr,nc)) cnt += 1 if cnt > ans: ans = cnt print(ans)
안녕하세요! 멋진 강의를 들을 수 있어서 감사하고 있습니다. 잠재요인 기반의 협업필터링 이해와 경사하강법을 이용한 행렬 분해 18:12 에서 나오는 L2 규제에 대해 궁금한 점이 있어서 문의 드립니다. 수학에 약해서 공부해볼겸 수학적으로 해석을 하려는데, 다른 사이트의 참고 내용들을 보다보니 L2 규제에 시가마가 들어가던데 여기서는 안 들어가는 이유가 무엇인지 궁금합니다. 감사합니다!
디버그를 해보았는데도 이해가 되질 않아 질문을 올립니다. 둘 다 실행했을 때, y입력 후 엔터를 쳤다고 가정 하고 제 나름대로 작동 순서를 글로 작성해보았습니다. 1번째 코드 (while문, continue 없음) 이것이 처음 작성한 코드입니다. ex) y 입력 후 엔터 "Current count is 0. Continue? (y/n)" 출력 후 입력 대기 → y 입력 후 엔터 if문에서 입력한 문자 'y'와 n을 비교한다. [검사] n이 아니므로 빠져나오지 않고 count++ 실행 "Current count is 1. Continue? (y/n)" 출력 후 입력 대기 → (버퍼에 있던 \n) if문에서 입력한 문자 \n과 n을 검사하여 통과 [검사] count++실행 "Current count is 2. Continue? (y/n)" 출력 후 입력 대기 2번째 코드 (while문, continue 추가) 이것이 두번째 작성한 코드입니다. ex) y 입력 후 엔터 "Current count is 0. Continue? (y/n)" 출력 후 입력 대기 → y 입력 후 엔터 if문에서 입력한 문자 'y'와 n을 비교한다. [검사] n이 아니므로 반복문(while(1))을 빠져나오지 않는다. while(2)문에서 y 검사(참) → continue 실행 [무시] while(2)문에서 \n 검사(거짓) → 빠져나옴 count++ 실행 "Current count is 1. Continue? (y/n)" 출력 후 입력 대기 if문에서 입력한 문자 '\n'과 n을 비교한다. [검사] if문을 빠져나와 while문의 조건(거짓)을 만족시키지 못한다. count++ 실행 "Current count is 1. Continue? (y/n)" 출력 후 입력 대기 ------------------------------ 1. 2번째 코드에서 while(2)문과 continue;의 조합으로 작성한 코드가 어째서 '첫번째 글자를 제외한 나머지를 버퍼에서 싹 지워주기 위함'인지 잘 모르겠습니다. 결과적으로 while문-continue는 첫번째 글자 포함, 그 이후 글자까지 무시한 후 \n은 false이므로 아무 작용을 하지 못하는 것이 아닌가 싶습니다. →결국 2번째 반복(cycle)에서 버퍼에 남아있는 \n 을 if문에서 판단하고, 결국 1번째 코드와 동일하게 작동하는 것이 아닌가요?