/usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in check_consistent_length(*arrays) 405 uniques = np.unique(lengths) 406 if len(uniques) > 1: --> 407 raise ValueError( 408 "Found input variables with inconsistent numbers of samples: %r" 409 % [int(l) for l in lengths] ValueError: Found input variables with inconsistent numbers of samples: [2286, 238] 수업 내용대로 했는데 이러한 에러가 나오네요.. 그대로 코드로 작성했는데요. 샘플 수가 안맞는건가요.
안녕하세요 강사님.. 제가 일주일이 넘는 기간 동안 계속 이것저것 시도를 해봤음에도 왜 분류 성능이 10%인지를 모르겠어서 실례를 무릅쓰고 질문을 올리게 되었습니다.. cifar10 이미지가 32 크기여서 128 정도로만 rescale을 했고, normalize도 진행했음에도 계속 성능이 10%대이고, loss는 줄어들었다가 갑자기 튀기도 하면서.. 제대로 학습이 되고 있지 않은 것 같습니다ㅠㅠ 바쁘시겠지만 문제의 원인이 무엇인지 여쭤보고 싶습니다ㅠㅠ 감사합니다.. https://drive.google.com/file/d/1FEsv1dex9y9I4AFqX42gBIhVeeOcgQXQ/view?usp=sharing
안녕하세요? PINN 이 무엇인지 매우 궁금하던 차에 인프런에서 강의가 개설되어 수강하게 되었습니다. 짧은 시간에 PINN 의 개념과 큰 그림을 이해하는데 매우 도움이 많이 된 강좌여서 정말 감사하다는 말씀을 먼저 드리고 싶습니다 ^^ 제조업체에서 AI 적용을 고민하는 직무에 있다보니 PINN 이 어떤 분야를 대체하기 위해 고안된 것인지 등... business 적용에 대한 몇 가지 질문을 드려 보고자 합니다. 일단 PINN 에 대한 저의 이해도가 정확한지 부터 확인하고 싶은데요, 네트워크 구조에는 다른 딥러닝 방법론과 차이점이 없어보이고, 변수에 미분방정식의 변수가, loss function 에는 지배방정식인 미분방정식이 적용되고, 해당 미분방정식을 규제해 주기 위한 초기값이나 경계조건도 Loss 에 반영되어야 한다는 것으로 이해했습니다. 그러다 보니 데이터가 없어도 학습이 가능하고, 일부데이터가 있다면 loss 값에 포함을 시켜서 모델의 오차를 보정시켜 주는 용도로 활용이 되는 것 같습니다. 제가 이해한 것이 맞는지요? 그렇다면 제조업계에서의 PINN 이 어느 분야에 잘 맞는지...에 대한 근본적인 질문을 드리고 싶은데요, 해당 시스템 behavior 를 설명할 수 있는 미분방정식이 명확하다는 말은, 그냥 해당 미분방정식에 수치를 넣어서 계산하면 딥러닝에 적용하는 것 보다 더 명확하고 신뢰도 높은 solution 을 얻게 될 것으로 생각이 되어서요.. 만약 CPU solving 자원이 넉넉하다면 굳이 PINN 적용 할 필요 없이 해당 분야에 신뢰도가 높은 지배방정식 자체를 사용해서 문제를 풀면 되는 것은 아닌지요? CAE solving 과정이 미분방정식을 푸는 과정이고 제조업체에서 명확한 지배방정식이 정의 될 수 있는 분야는 CAE analysis 가 가능한 분야라고도 볼수 있을 텐데, 그렇다면 PINN 적용이 가능한 거의 대부분의 문제가 현재 CAE 로도 solving 가능한 분야로 거의 한정되는 것으로 이해하면 될지도 궁금합니다. 그렇다면 PINN 의 효용성이란 것은 CAE 보다 좀 더 효율적인 (CPU or GPU 자원도 적게 사용하고 예측시간도 CAE solving 시간보다 많이 짧은) 방법이다.. 정도로 이해 되기도 하는데, '효율성' 이외에도 PINN 이 지배방정식을 컴퓨터로 직접 solving 하는 것보다 더 우수할 수 있는 장점이 있다면 어떤것 들이 있을지요..? 왠지 PINN이 지배방정식이 성립하거나 성립하지 않는 분야를 모두 가지고 있는 일반 제조업체에서 딥러닝을 적용하는 경우보다는 차세대 solver 를 연구하는 CAE software 회사에 더 중요한 방법론인것 같은 느낌도 들어서.. 드리는 질문입니다. 꼭 미분방정식이 아니더라도 해당 물리현상의 거시적인 현상을 설명할 수 있는 모종의 수식 혹은 미분방정식은 아니지만 현상적으로 검증된 실험식이 존재한다면 (세부적으로 들어가자면 오차는 존재하지만 거시적인 경향을 따라가는), Loss function 에 PIMM 을 적용해 볼 수 있을지.. 에 대한 질문도 드립니다. 예를 들어 3차원 이미지를 input 받아서 3차원 이미지를 3D convolution layer 로 prediction 하는 경우 (3차원의 pixel level prediction) input 좌표 x,y,z 에 따라서 output 이미지의 좌표 x,y,z 에서의 특성치 u가 모종의 좌표에 따른 함수 관계로 trend 를 따라간다는 것이 이미 증명이 되어 있는 경우라면, u = f(x,y,z) 와 같은 함수를 loss function 에 반영해 놓고, 수집한 데이터에 와 모델이 예측한 값에 대한 MSE 를 더한 loss function 을 minimize 하는 방향으로 학습을 시키는 것도 의미를 가질 수 있는 PINN 활용 방안이 될 수 있는지.. 궁금합니다.
회사에서는 라이선스 문제로 아나콘다를 설치하여 사용하지 못하고 있습니다. 그래서 이전 강의부터 계속 VS CODE에서 주피터노트북 확장자를 사용하여 강의를 듣고있습니다. 머신러닝 강의 때는 VS CODE에서 라이브러리가 문제 없이 설치되었는데, 파이토치의 경우 터미널에서 pip install torch torchvision torchaudio 한 후, 셀에서 import torch를 하면 계속 "[WindError 126] 지정된 모듈을 찾을 수 없습니다.~~~~" 에러가 뜹니다. 혹시 VS CODE에서 주피터노트북을 활용하여, PIP를 통해 파이토치 설치법을 알려주실수있는지 문의드립니다. 추가로 CUDA를 지원하지 않는 경우 cpu only로 설치해도 강의를 따라하기에 무리가 없는지 궁금합니다. - 강의 영상에 대한 질문이 있으시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 - 우선 질문전에 검색을 꼭 해보세요. 저희 목표는 스스로 이슈를 해결하는 역량을 기르는 것이고, 이는 즉 검색역량을 기르는 것입니다 - 강의 영상 외적인 질문은 인프런 커뮤니티 (https://www.inflearn.com/community/questions) 도 활용해보세요~
안녕하세요! 오토인코더 구현 중 질문이 있어서 글을 남기게 되었습니다. class AutoEncoder(nn.Module): def __init__(self): super().__init__() k = 16 self.encoder = nn.Sequential( nn.Conv2d(1, k, 3, stride=2), nn.ReLU(), nn.Conv2d(k, 2*k, 3, stride=2), nn.ReLU(), nn.Conv2d(2*k, 4*k, 3, stride=1), nn.ReLU(), nn.Flatten(), nn.Linear(1024, 10), nn.ReLU() ) self.decoder = nn.Sequential( nn.Linear(10, 1024), nn.ReLU(), nn.Unflatten(1, (4*k, 4, 4)), nn.ConvTranspose2d(4*k, 2*k, 3, stride=1), nn.ReLU(), nn.ConvTranspose2d(2*k, k, 3, stride=2), nn.ReLU(), nn.ConvTranspose2d(k, 1, 3, stride=2, output_padding=1) ) 여기에서 nn.Linear(1024, 10), nn.ConvTranspose2d(k, 1, 3, stride=2, output_padding=1)에 질문이 있습니다. 채널 수를 직접 맞춰주는 것이 아니라 반환 받아서 그 값을 nn.Linear(이 부분, 10)에 넣어주고 싶은데 gpt 한테 물어보니까 그러려면 이렇게 직접 구해서 add_module을 해줘야 한다던데... 정말 이런 방법 뿐인지ㅜㅜ 매번 채널수를 직접 구해야 하는 것인지 궁금합니다! def __init__(self, input_shape=(1, 28, 28)): super().__init__() k = 16 self.encoder = nn.Sequential( nn.Conv2d(1, k, 3, stride=2), nn.ReLU(), nn.Conv2d(k, 2*k, 3, stride=2), nn.ReLU(), nn.Conv2d(2*k, 4*k, 3, stride=1), nn.ReLU(), nn.Flatten(), ) self.latent_dim = self.get_encoder_dim() self.encoder.add_module('linear', nn.Linear(self.latent_dim, 10)) self.encoder.add_module('relu', nn.ReLU()) def get_encoder_dim(self): x = torch.randn(1, self.input_shape) x = self.encoder(x) return x.view(1, -1).size(1) nn.ConvTranspose2d(k, 1, 3, stride=2, output_padding=1) 여기에서도 output_padding=1이 필요한지 알기 위해서는 직접 계산을 다 해봤어야 하는 것인데.. 이것도 위의 경우와 마찬가지로 직접 구하는 방법 뿐인지 알고 싶습니다! 감사합니다!
안녕하세요 강사님, 강의 잘 보고 있습니다. 다름이 아니라, pretrained model에서 강의에서와 같이 (1) model의 feature extraction 부분에서 Conv2d의 kernel_size를 줄이고 (2) model의 fully connected layer에서 출력 크기를 10으로 줄인 부분에서 의문이 있어서 글을 남기게 되었습니다. (2)의 경우는 사실 fully connected layer가 복잡한 구조..?를 가지지는 않는다고 생각하여 다시 학습하는 데 별로 문제가 없다고 생각합니다. 하지만, (1)의 경우, 모델의 초반에서 아예 kernel size를 변경했고, 모델 프리징 강의에서 언급하신 바와 같이 그렇게 바꾸게 되면 임의의 랜덤 값으로 가중치가 초기화된다고 말씀하셨는데..! 그렇다면 Imagenet 모델로 사전 학습한 것이 의미가 있는건지 살짝 의문이 듭니다ㅠㅠ 사전 학습 모델의 목적이 그대로 웨이트를 사용한다는 것보다 모델의 구조를 가져온다는 것이라면 납득이 되지만, 사전 학습에서의 가중치가 transfer learning 될 때 어떻게 사용되고 변하는지를 잘 몰라서 이런 궁금증이 생긴 것 같습니다.. 항상 좋은 강의 감사합니다!!
안녕하세요? 저는 열수력해석 알고리즘을 개발 중인 Thermal Engineer 입니다. 다중배관에 대한 수력학적 해석 알고리즘을 다루는데, 현재는 배관 내부의 유동해석을 regression 기법을 활용한 근사해를 구하는 방법을 활용중입니다. 현재 알고리즘은 1 phase 해석은 어느 정도 수행하지만, 2 phase(non-slip condition) 해석에서 많은 난제가 있었습니다.(음함수 발생 등) 그래서 해당 문제를 머신러닝 기법을 활요하면 좋지 않을까 해서 PINNs에 관심을 갖게 되었습니다. 서론이 길었네요.. 나비에 스톡스 equation에 대한 예제를 pytorch로 구현해서 해를 구하는 방법은 해보신적 있으신지 궁금합니다. 제가 풀려는 문제의 핵심 방정식은 나비에 스톡스 equation에 종속되어 있거든요! 잘아시겠지만, PINNs이 정착해서 가장 각광받을 분야는 열/유체 분야가 될 것 같은데, 이에 대해서는 어떻게 생각하시는 지 궁금합니다^^ 감사합니다. 다른 강의들도 쭉 ~ 따라가며 강사님처럼 해당 분야 speciality를 갖고 싶네요 ^^
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 폴더 만드는 부분에서 directory_create('x/x')를 하게 되면 x에 어떤 이름을 넣어도 다 이미 만들어졌다고만 뜨고 실제 드라이브 들어가면 아무것도 폴더가 생성이 안되었는데, 왜 그런건지 잘 모르겠어요. 그리고 현재 디렉토리 위치 설정하는 것도 이런 오류가 발생하는데, 구글 드라이브 마운트 할 때는 잘 됐었는데 이런 오류가 발생하네요..! cd/~ 의 코드를 실행하면 현재 디렉토리를 cd/~에서 ~에 해당하는 디렉토리로 이동해주는게 아닌가요? 아래 사진은 현재 드라이브 디렉토리 경로입니다!
10_ADVANCE-EXAMPLE-MILTI-LABEL-CLASSIFICATION 과 11_MILTI-LABEL-CLASSIFICATION-DROPOUT-BATCHNORMALIZATION 강의자료에서 맨 밑부분의 테스트셋 기반 Evaluation 에서 test_loss 를 계산할 때 전체 데이터인 10000으로 나누셨는데, 왜 그러신건지 궁금해서 질문드립니다. train 과 validation 의 loss 계산은 train_batches 와 val_batches 개수(for문 도는 횟수) 만큼만 나누셨는데 test loss 를 계산할 때는 minibatch 가 아닌 전체 데이터로 나누셔서 상대적으로 test data 의 loss 값이 작아보여서요. test_loss = 0 correct = 0 wrong_samples, wrong_preds, actual_preds = list(), list(), list() model.eval() with torch.no_grad(): for x_minibatch, y_minibatch in test_batches: y_test_pred = model(x_minibatch.view(x_minibatch.size(0), -1)) test_loss += loss_func(y_test_pred, y_minibatch) pred = torch.argmax(y_test_pred, dim=1) correct += pred.eq(y_minibatch).sum().item() wrong_idx = pred.ne(y_minibatch).nonzero()[:, 0].numpy().tolist() for index in wrong_idx: wrong_samples.append(x_minibatch[index]) wrong_preds.append(pred[index]) actual_preds.append(y_minibatch[index]) test_loss /= len(test_batches.dataset)
강사님, 안녕하세요! 항상 좋은 강의 잘 보고 있습니다 :D 4-3강 교차 검증(Cross-Validation)에서 best model을 어떻게 선정하는 것인지 조금 헷갈려 질문 드립니다. 예를 들어, 본 강의에서는 3개 fold에 대해 cross-validation을 수행하고, 모델의 최종 성능은 <3개 fold의 validation loss의 평균>으로 계산되는 것으로 이해했는데요. 1) 그렇다면 hyperparameter tuning 등을 통해 이 <평균 validation loss>가 가장 낮아지는 모델을 찾아야 하는 것이 맞나요? 다시 말해, 여러 번 cross-validation을 수행함으로써 가장 낮은 <평균 validation loss>를 가지는 모델을 best model로 선정하는 것이 맞는지 궁금합니다. 2) 만약 맞다면, 앞선 강의들에서는 "epoch 마다" loss가 최소화되는지 확인하고 모델 save를 수행했었는데, 이제는 "CV를 수행할 때 마다" loss가 최소화되는지 확인하고 모델 save를 수행하면 되는 것이 맞나요? 3) 마지막으로, 이미 학습된 결과를 바탕으로 best model을 선정했는데 왜 best model에 한 번 더 전체 trainset으로 학습을 진행해줘야 하는지 궁금합니다.
안녕하세요 호형 선생님. 강의 잘 들었습니다. 이번 ' 개념편 4강 활성화 함수 ' 에서 질문이 있습니다. 진행하는 업무에 따라 ( 인공 신경망의 각 층에 적용하는 ) 최적의 활성화 함수가 무엇인지는 다 다를 수 있다고 하셨는데요. 그럼 그 최적의 활성화 함수가 무엇일지 미리 연역적으로 알 수 있는 방법이 있나요? ( 예를 들면 , 이 문제는 이런 특징이 있으니 , 이런 특징을 잘 나타내는 어쩌구 함수를 활성화 함수로 쓰면 되겠다 등 ) 아니면 그냥 결과적으로 모든 종류의 활성화 함수를 하나하나 대입해보며 가장 좋은 성능이 나오는 함수를 선택하는 수 밖에 없나요 ? 감사합니다.