inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

S3에 업로드까지는 성공했는데 사진이 나오지 않습니다.

미해결

탄탄한 백엔드 NestJS, 기초부터 심화까지

작성한 코드 https://github.com/Parkdev/myfirstnest 업로드 완료 후 결과 링크 https://devpark-awsnestcat.s3.ap-southeast-2.amazonaws.com/cat/1713862948347_1.jpeg 업로드 완료까지는 성공하였으나, 업로드 한 사진이 파일이 깨져서 올라가고 있습니다. 어디가 잘못되었는지 잘모르겠네요. 도와주세요.

  • node.js
  • mongodb
  • express
  • nestjs
  • ssr
박데브 댓글 1 좋아요 0 조회수 277

Feature Scaling

미해결

파이썬을 활용한 머신러닝 딥러닝 입문

feature scaling에서 X_test는 fit_transform이 아니라 transform만 해야한다고 하셨는데요! (logistic regression 실습 18분 부근) 어차피 X_train과 평균과 표준편차가 동일할 거라는 건 이해가 되지만, 미래 값인 X_test의 평균/표준편차를 구할 순 없다는 말씀은 이해가 잘 되지 않습니다 ㅠㅠ, 그리고 어차피 동일하다면 X_test에 fit_transform을 해도 같은 결과가 나와야 하는 거 아닌가요? 늘 감사합니다!

  • python
  • 머신러닝
  • 딥러닝
  • pandas
  • numpy
  • keras
  • tensorflow
  • anaconda
  • matplotlib
  • cnn
태보미 댓글 1 좋아요 0 조회수 260

ERROR

미해결

따라하며 배우는 리액트 테스트 [2023.11 업데이트]

App.js파일을 refresh 하면 이렇게 error가 뜨네요 ㅜㅜ 해결책을 아무리 찾아봐도 나오질 않습니다 . .

  • react
  • 웹앱
  • React-Context
  • jest
  • 소프트웨어-테스트
dbs00024 댓글 1 좋아요 0 조회수 229

10강 패키지 설치 시 에러가 나네요.

해결됨

프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용

(오늘은 뭔가 할때마다 오류가 나네요. ㅡㅡ;;) pdf-bot 프로젝트 만들고 패키지를 설치하려고 하니 오류가 나네요... Could not find a matching version of package lanchain 뭐를 확인해 보면 될까요? 강의에서 하라는대로 하긴 했는데..

  • 챗봇
  • gradio
  • chatgpt
  • llm
  • langchain
  • openai-api
byun502 댓글 1 좋아요 0 조회수 297

강의 교안

해결됨

[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기

강의 교안은 없는 건가요? 못잧겠어요. 어느경로에 있나요 ?

  • aws
  • docker
  • ci/cd
  • Terraform
  • gitlab
  • devsecops
  • trivy
  • semgrep
  • gitleaks
이성훈 댓글 1 좋아요 1 조회수 306

게이트웨이와 라우터

해결됨

외워서 끝내는 네트워크 핵심이론 - 기초

게이트웨이 가 L2 -> L3 라우터 link up 해주는 라우터로 이해를 했는데 다른건가요? 서브넷 마스크 할당이 최대 254개라 하셨는데, 게이트웨이 하나당 연결되는 컴퓨터는 L2 엑세스 스위치, L2 분배 스위치 포함해서 254개를 하위로 할당되는건가요?

  • 네트워크
  • 프로토콜
sulog 댓글 2 좋아요 0 조회수 379

매핑이 잘 안되는거 같아요

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.영학님이 주신 걸로 하면 버전이 안맞아서 커뮤니티 글에 있는 17버전을 새로 만들어서 영학님이 주신 form에 내용을 main하고 resources를 바꿔서 실행 하는데 서버도 열리고 잘 되는데 이상하게 이런 현상이 떠서 질문을 드립니다 이렇게 뜨고 상품관리 를 누루면 이렇게 뜨는데 위에 basic을 form으로 바꾸면 잘 뜨고 다른 기능도 잘 됩니다.그런데 할때 마다 계속 바꿔야 하니 문제를 찾아 보고 있는데 resources에 index.html도 확인 했는데 basic이 쓰인 곳도 없고 FormController 부분에도 basic을 반환 하는 부분도 없는데 프로그램 코드안 에서도 basic을 반환 하는 부분이 어디에도 없는데 뭐 때문에 그런지 잘 모르겠습니다. 재가 미숙해서 잘 못 찾는것도 있지만.. 배운다는 생각으로 충고 주시면 잘 배우겠습니다

  • spring
  • mvc
fnvjtm153 댓글 1 좋아요 0 조회수 382

11. 임시반장 정하기

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

5 9 8 7 6 5 5 6 7 8 9 1 2 3 7 8 4 5 3 4 2 6 2 8 4 2 이예제의 답이 왜 3번학생인가요 4번학생이이 제일 많이 겹치는거 아닌가요?

  • java
  • 코딩-테스트
김태호 댓글 1 좋아요 1 조회수 190

DHCP 주소와 서브넷마스크

해결됨

외워서 끝내는 네트워크 핵심이론 - 기초

제가 컴퓨터를 켰을때 NIC 카드가 물린 LAN 영역에 브로드 캐스트로 DHCP 서버를 찾으면 (공유기), 공유기에서 제 IP 주소, 서브넷 마스크주소, 게이트웨이주소, DNS 주소를 할당해준다. 이 개념이 맞을까요? 여러 궁금한 점이 있는데요 서브넷 마스크의 역할은 1111~ 로 and 연산을해서 내 네트워크가 맞는지 체크를 하는 역할이라 했는데, 서브넷 마스크 주소는 항상 255.255.255.0 이 되는거 아닌가요? 왜 할당을 해주는건가요? 게이트 웨이 주소는 해당 DHCP 서버가 연결된 L3 라우터 주소를 말하는게 맞나요? DNS 주소는 DHCP 가 전달해준 IP 주소의 도메인 네임 서버인가요? 아니면 DNS 쿼리를 날려주는 루트 DNS (13개있는?) 주소인가요?

  • 네트워크
  • 프로토콜
sulog 댓글 2 좋아요 0 조회수 372

객체의 참조값 직접 출력

해결됨

김영한의 실전 자바 - 중급 1편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] toString()이 오버라이딩 된 경우 객체의 참조값을 출력할 수 없기 때문에 System.identityHashCode()와 Integer.toHexString()를 사용하여 출력할 수 있다고 하셨는데요, System.identityHashCode()을 통해 정수로 출력한 참조값을 Integer.toHexString() 16진수 문자열로 굳이 변환하는 이유가 단순히 가독성을 올리기 위한 작업이라고 보면 될까요?

  • java
  • 객체지향
loong 댓글 1 좋아요 0 조회수 299

nodemon refresh

미해결

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

터미널에 yarn start:dev 를 입력하면 에러가 나와고 있어요. 어떻게 해결할까요? node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module '/Users/navruzbekabdullajonov/Desktop/codecamp-backend-mento/class/section03/index.js' at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15) at Module._load (node:internal/modules/cjs/loader:985:27) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12) at node:internal/main/run_main_module:28:49 { code: 'MODULE_NOT_FOUND', requireStack: [] } Node.js v20.11.1 [nodemon] app crashed - waiting for file changes before starting... ^[[A

  • javascript
  • node.js
  • docker
  • rest-api
  • nestjs
navruzbek-1998_ 댓글 1 좋아요 0 조회수 173

포인터 관련

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

인터넷을 찾았을 때 굉장히 헷갈리는 부분이 있는데 예시로 int* a = &b;에서 포인터 a는 b의 주소를 가리킨다라는 설명도 있고 포인터 a는 b를 가리킨다라는 설명도 있는데 둘 중에 어떤 것이 맞는 설명인가요?

  • c++
한울 댓글 1 좋아요 0 조회수 258

화면에 googleMap띄우기에서요 에러나네요

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

Error: The plugin "google_maps_flutter_ios" requires a higher minimum iOS deployment version than your application is targeting. To build, increase your application's deployment target to at least 14.0 as described at https://docs.flutter.dev/deployment/ios Error running pod install Error launching application on iPhone 15 Pro. \ IOS에뮬 띄우는데 위와같은 에러나와요.. 구글링해봐도 뭔가 xcode에서 셋팅을하라하는거같은데 엑스코드가 익숙치않아서 힘드네요 혹시 방법이 있을까요?

  • flutter
  • 클론코딩
eventures111 댓글 2 좋아요 0 조회수 1064

kubectl apply 적용 시 status "imagepullbackoff, errimagepull" 상태

미해결

초보를 위한 쿠버네티스 안내서

안녕하세요 kubectl apply -f wordpress-k8s.yml 적용시 이미지들이 제대로 불러와지지 않습니다. 확인 부탁드립니다 감사합니다 (__ ) kubectl get all 사진과 아래 kubectl describe pod 명령어 출력 내용 전달 드립니다. Name: wordpress-746bd6d54b-glpjq Namespace: default Priority: 0 Service Account: default Node: minikube/172.22.59.104 Start Time: Tue, 23 Apr 2024 15:41:01 +0900 Labels: app=wordpress pod-template-hash=746bd6d54b tier=frontend Annotations: <none> Status: Pending IP: 10.244.0.10 IPs: IP: 10.244.0.10 Controlled By: ReplicaSet/wordpress-746bd6d54b Containers: wordpress: Container ID: Image: wordpress:5.9.1-php8.1-apache Image ID: Port: 80/TCP Host Port: 0/TCP State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: WORDPRESS_DB_HOST: wordpress-mysql WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: password Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-v6cfh (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-v6cfh: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 7m50s default-scheduler Successfully assigned default/wordpress-746bd6d54b-glpjq to minikube Warning Failed 7m9s kubelet Failed to pull image "wordpress:5.9.1-php8.1-apache": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:33889->172.22.48.1:53: i/o timeout Warning Failed 6m29s kubelet Failed to pull image "wordpress:5.9.1-php8.1-apache": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:46061->172.22.48.1:53: i/o timeout Warning Failed 5m46s kubelet Failed to pull image "wordpress:5.9.1-php8.1-apache": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:39787->172.22.48.1:53: i/o timeout Normal Pulling 4m58s (x4 over 7m49s) kubelet Pulling image "wordpress:5.9.1-php8.1-apache" Warning Failed 4m35s (x4 over 7m9s) kubelet Error: ErrImagePull Warning Failed 4m35s kubelet Failed to pull image "wordpress:5.9.1-php8.1-apache": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:39383->172.22.48.1:53: i/o timeout Warning Failed 4m23s (x6 over 7m9s) kubelet Error: ImagePullBackOff Normal BackOff 4m9s (x7 over 7m9s) kubelet Back-off pulling image "wordpress:5.9.1-php8.1-apache" Warning Failed 2m40s kubelet Failed to pull image "wordpress:5.9.1-php8.1-apache": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:45684->172.22.48.1:53: i/o timeout Name: wordpress-mysql-78488dd7d5-t9mz5 Namespace: default Priority: 0 Service Account: default Node: minikube/172.22.59.104 Start Time: Tue, 23 Apr 2024 15:41:01 +0900 Labels: app=wordpress pod-template-hash=78488dd7d5 tier=mysql Annotations: <none> Status: Pending IP: 10.244.0.9 IPs: IP: 10.244.0.9 Controlled By: ReplicaSet/wordpress-mysql-78488dd7d5 Containers: mysql: Container ID: Image: mariadb:10.7 Image ID: Port: 3306/TCP Host Port: 0/TCP State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: MYSQL_DATABASE: wordpress MYSQL_ROOT_PASSWORD: password Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7hxcx (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-7hxcx: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 7m50s default-scheduler Successfully assigned default/wordpress-mysql-78488dd7d5-t9mz5 to minikube Warning Failed 7m29s kubelet Failed to pull image "mariadb:10.7": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:50523->172.22.48.1:53: i/o timeout Warning Failed 6m49s kubelet Failed to pull image "mariadb:10.7": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:42046->172.22.48.1:53: i/o timeout Warning Failed 6m7s kubelet Failed to pull image "mariadb:10.7": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:51638->172.22.48.1:53: i/o timeout Normal Pulling 5m15s (x4 over 7m49s) kubelet Pulling image "mariadb:10.7" Warning Failed 4m55s (x4 over 7m29s) kubelet Error: ErrImagePull Warning Failed 4m55s kubelet Failed to pull image "mariadb:10.7": Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.22.48.1:53: read udp 172.22.59.104:42815->172.22.48.1:53: i/o timeout Warning Failed 4m40s (x6 over 7m29s) kubelet Error: ImagePullBackOff Normal BackOff 2m47s (x12 over 7m29s) kubelet Back-off pulling image "mariadb:10.7"

  • docker
  • kubernetes
댓글 1 좋아요 0 조회수 941

같은 강의가 들어있는 것 같아요!

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

onSaved()와 validate() 강의가 같은데, 후자의 강의를 업로드 해주시면 될 것 같아요! 감사합니다.

  • flutter
  • 클론코딩
keithdoves 댓글 1 좋아요 0 조회수 225

jar input output_notice 문의

해결됨

빅데이터 파이프라인 마스터; 성공을 위한 도구와 기술

강사님.. 스스로 문제 해결해가며 여기까지 왔는데.. 여기는 해결이 안되 문의 드립니다..ㅠ 6:24초 영상 처럼 output_notice 디렉토리에 [실습2]에서 했던 input 파일을 맵 리듀스가 되어야 하는데 저 화면에서 30분동안 멈춰 있다 겨우 동작 됐는데 정상 동작 되지 않은거 같습니다 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount input output_notice bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount input output_notice 24/04/23 14:31:51 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 24/04/23 14:31:52 INFO input.FileInputFormat: Total input paths to process : 1 24/04/23 14:31:52 INFO mapreduce.JobSubmitter: number of splits:1 24/04/23 14:31:52 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1713835952413_0002 24/04/23 14:31:52 INFO impl.YarnClientImpl: Submitted application application_1713835952413_0002 24/04/23 14:31:52 INFO mapreduce.Job: The url to track the job: http://ubuntu-virtual-machine:8088/proxy/application_1713835952413_0002/ 24/04/23 14:31:52 INFO mapreduce.Job: Running job: job_1713835952413_0002 24/04/23 14:31:57 INFO mapreduce.Job: Job job_1713835952413_0002 running in uber mode : false 24/04/23 14:31:57 INFO mapreduce.Job: map 0% reduce 0% 24/04/23 14:32:01 INFO mapreduce.Job: map 100% reduce 0% bin/hadoop fs -ls output_notice Found 1 items drwxr-xr-x - ubuntu supergroup 0 2024-04-23 14:31 output_notice/_temporary etc/hadoop/yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration> etc/hadoop/mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

  • 빅데이터
  • hadoop
  • elasticsearch
  • logstash
  • Kibana
  • apache-spark
  • s3-bucket
댓글 3 좋아요 0 조회수 396

RequestMapping 이후 GetMapping

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 이렇게 RequestMapping으로 /template으로 시작하는 url을 mapping하고, /fragment로 오는 get을 template()에서 처리합니다. 그런데 이런 컨트롤러 클래스 내부의 메소드를 public으로 하는 이유가 있을까요? 예외없이 private으로 해야하는 것 아닌가요? 다른곳에서 TemplateController 인스턴스를 만들어서 template() 함수를 쓰려고 해도, templateController가 @Controller니까 의미 없지 않나요? 즉,spring 차원에서 public을 막고 private으로만 메소드를 만들게 할 수 도 있는데, 그렇게 않한 이유가 알고 싶습니다.

  • spring
  • mvc
문상준 댓글 1 좋아요 0 조회수 274

10강에서 poetry 프로젝트 생성시 오류가 납니다.

해결됨

프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용

어제는 정상적으로 프로젝트 만들고 강의하면서 따라 했는데 오늘은 파워쉘에서 만들려고 하니 아래와 같은 오류가 납니다. 왜 그럴까요? ㅡㅡ; poetry를 뭔가 실행해야 되나요?

  • 챗봇
  • gradio
  • chatgpt
  • llm
  • langchain
  • openai-api
byun502 댓글 2 좋아요 0 조회수 364

Transformer 번역기 부분에 대해 질문 있습니다.

미해결

실무 중심의 딥러닝 NLP 심화: LLM 아키텍처와 파인튜닝 실전

아래 사이트는 Encoder / Decoder를 하나의 Class로 만들었는데요..강사님도 해당 예제는 많이 보셨을거 같습니다. https://keras.io/examples/nlp/neural_machine_translation_with_transformer/ 아래와 같이 Encoder / Decoder Class를 선언하고..추가로 shape들을 찍어 보았습니다. (참고로 get_config 함수는 지면상 뺐습니다.) class TransformerEncoder(keras.layers.Layer): def init(self, num_heads, embed_dim, dense_dim, **kwargs): super().__init__(**kwargs) self.num_heads = num_heads self.embed_dim = embed_dim self.dense_dim = dense_dim self.class_name = 'TransformerEncoder' self.attention = keras.layers.MultiHeadAttention(self.num_heads, key_dim=self.embed_dim, value_dim=self.embed_dim) self.dense = keras.models.Sequential([keras.layers.Dense(self.dense_dim, activation='relu'), keras.layers.Dense(self.embed_dim)]) self.layer1 = keras.layers.LayerNormalization() self.layer2 = keras.layers.LayerNormalization() self.support_mask = True def call(self, inputs, mask=None): tf.print('ClassName=TransformerEncoder-------------------------------------------------------') if mask is not None: #print('ClassName={}, mask.shape={}'.format(self.class_name, mask.shape)) padding_mask = mask[:, tf.newaxis, :] tf.print('mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('mask=None') attention_out = self.attention(query=inputs, key=inputs, value=inputs, attention_mask=padding_mask) tf.print('input.shape=', inputs.shape) tf.print('attention_out.shape=', attention_out.shape) layer1_out = self.layer1(inputs+attention_out) #print('ClassName={}, layer1_out.shape={}'.format(self.class_name, layer1_out.shape)) dense_out = self.dense(layer1_out) tf.print('dense_out.shape=', dense_out.shape) return self.layer2(layer1_out+dense_out) class TransformerDecoder(keras.layers.Layer): def init(self, num_heads, embed_dim, latent_dim, **kwargs): super().__init__(**kwargs) self.num_heads = num_heads self.embed_dim = embed_dim self.latent_dim = latent_dim self.class_name = 'Decoder' self.attention_1 = keras.layers.MultiHeadAttention(num_heads=self.num_heads, key_dim=self.embed_dim) self.attention_2 = keras.layers.MultiHeadAttention(num_heads=self.num_heads, key_dim=self.embed_dim) self.layer_1 = keras.layers.LayerNormalization() self.layer_2 = keras.layers.LayerNormalization() self.layer_3 = keras.layers.LayerNormalization() self.dense = keras.models.Sequential([keras.layers.Dense(self.latent_dim, activation='relu'), keras.layers.Dense(self.embed_dim)]) self.supports_masking=True def call(self, inputs, encoder_outputs, mask=None): tf.print('ClassName=TransformerDecoder-------------------------------------------------------') #inputs.shape=(None, 35, 32), encoder_outputs.shape=(None, 35, 32) #tf.print('aaaaaaaaa=', inputs.shape) casual_mask = self.get_casual_attention_mask(inputs) tf.print('inputs.shape=', inputs.shape) tf.print('casual_mask.shape=', casual_mask.shape) if mask is not None: padding_mask = tf.cast(mask[:, None, :], dtype='int32') padding_mask = tf.minimum(padding_mask, casual_mask) tf.print('padding_mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('padding_mask = None') attention_1_out = self.attention_1(query=inputs, key=inputs, value=inputs, attention_mask=casual_mask) tf.print('attention_1_out.shape=', attention_1_out.shape) layer_1_out = self.layer_1(inputs+attention_1_out) attention_2_out = self.attention_2(query=layer_1_out, key=encoder_outputs, value=encoder_outputs, attention_mask=padding_mask) layer_2_out = self.layer_2(layer_1_out + attention_2_out) dense_out = self.dense(layer_2_out) tf.print('dense_out.shape=', dense_out.shape) return self.layer_3(layer_2_out + dense_out) def get_casual_attention_mask(self, inputs): #input_shape=(2, 35, 32) =(BatchSize, Sequence_len, Embed_Len) input_shape = tf.shape(inputs) batch_size, sequence_length = input_shape[0], input_shape[1] #i=(35, 1), j=(35,) #i=[[0], [1], [2], ... [35]], j=[0 1 2 ... 34] i = tf.range(start=0, limit=sequence_length)[:, tf.newaxis] j = tf.range(start=0, limit=sequence_length) # tf.cast 함수는 보통 조건에 따른 True, False 의 판단 기준에 따라 True 면 1, False 면 0을 반환한다. # mask.shape=(1, 35, 35), mask=[[[1 0 0 .. 0], [1 1 0 0 ...0], [1 1 1 1 ...1 0], [1 1 1 1 ... 1 1]]] mask = tf.cast(i>=j, dtype='int32') mask = tf.reshape(mask, (1, input_shape[1], input_shape[1])) # mult = (2, 1, 1), (BatchSize, 1, 1) mult = tf.concat([tf.expand_dims(batch_size, -1), tf.convert_to_tensor([1,1])], axis=0) return tf.tile(mask, mult) MAX_EMBED=32 MAX_VOCAB=5000 MAX_SEQ = 35 MAX_DENSE=1024 MAX_HEAD=1 encoder_inputs = keras.layers.Input(shape=(MAX_SEQ,), dtype='int64', name='encoder_inputs') encoder_embed_outs = PositionalEmbedding(MAX_SEQ, MAX_VOCAB, MAX_EMBED)(encoder_inputs) encoder_transformer_outs = TransformerEncoder(num_heads=1, embed_dim=MAX_EMBED, dense_dim=MAX_DENSE)(encoder_embed_outs) #encoder_transformer_outs == (None, 80, 256) decoder_inputs = keras.layers.Input(shape=(MAX_SEQ,), dtype='int64', name='decoder_inputs') decoder_embed_outs = PositionalEmbedding(MAX_SEQ, MAX_VOCAB, MAX_EMBED)(decoder_inputs) #decoder_embed_outs == (None, 80, 256) decoder_transformer_outs = TransformerDecoder(1, MAX_EMBED, MAX_DENSE)(decoder_embed_outs, encoder_transformer_outs) decoder_dropout_outs = keras.layers.Dropout(0.5)(decoder_transformer_outs) decoder_outputs = keras.layers.Dense(MAX_VOCAB, activation='softmax')(decoder_dropout_outs) model = keras.Model(inputs=[encoder_inputs, decoder_inputs], outputs=decoder_outputs) model.summary() 호출(호출은 Log만 찍어보게 BatchSize를 줄였습니다.) q_train_seqs = q_seqs[:2] a_train_seqs = a_seqs[:2] print(q_train_seqs.shape, a_train_seqs.shape) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit([q_train_seqs, a_train_seqs[:, :-1]], a_train_seqs[:, 1:], epochs=1) 이렇게 해서 돌리면 결과가 아래와 같이 찍힙니다. ClassName=TransformerEncoder------------------------------------------------------- mask=None input.shape= TensorShape([None, 35, 32]) attention_out.shape= TensorShape([None, 35, 32]) dense_out.shape= TensorShape([None, 35, 32]) ClassName=TransformerDecoder------------------------------------------------------- inputs.shape= TensorShape([None, 35, 32]) casual_mask.shape= TensorShape([None, 35, 35]) padding_mask = None attention_1_out.shape= TensorShape([None, 35, 32]) dense_out.shape= TensorShape([None, 35, 32]) 1/1 [==============================] - 4s 4s/step - loss: 8.2735 - accuracy: 0.0000e+00 질문은 아래와 같습니다. Encoder 파트에서 mask=None 으로 Mask가 들어있지 않습니다. 그럼 굳이 mask는 구현할 필요가 없는건지? Decoder 파트에서는 첫번째 Self-Attention 부분에서만 제대로된 마스킹 값이 들어가고 Encoder의 Key와 매핑 시키는 부분에서는 마찬가지로 padding_mask가 None 입니다. 이 부분에 대해 조금 더 자세한 설명을 해 주시면 감사하겠습니다. 다시 한번 설명 드리면 class TransformerEncoder(keras.layers.Layer): ... def call(self, inputs, mask=None): tf.print('ClassName=TransformerEncoder-------------------------------------------------------') if mask is not None: #print('ClassName={}, mask.shape={}'.format(self.class_name, mask.shape)) padding_mask = mask[:, tf.newaxis, :] tf.print('mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('mask=None') #Encoder 에서 padding_mask는 None으로 찍힘 attention_out = self.attention(query=inputs, key=inputs, value=inputs, attention_mask=padding_mask) class TransformerDecoder(keras.layers.Layer): def call(self, inputs, encoder_outputs, mask=None): casual_mask = self.get_casual_attention_mask(inputs) #mask는 None 으로 들어옴 if mask is not None: padding_mask = tf.cast(mask[:, None, :], dtype='int32') padding_mask = tf.minimum(padding_mask, casual_mask) else: padding_mask = None # casual_mask는 현재 위치 이후는 0 으로 패딩 된 것 확인 attention_1_out = self.attention_1(query=inputs, key=inputs, value=inputs, attention_mask=casual_mask) layer_1_out = self.layer_1(inputs+attention_1_out) # 하지만 padding_mask는 None 임 attention_2_out = self.attention_2(query=layer_1_out, key=encoder_outputs, value=encoder_outputs, attention_mask=padding_mask) layer_2_out = self.layer_2(layer_1_out + attention_2_out)

  • 딥러닝
  • tensorflow
  • NLP
LEE JONG PIL 댓글 1 좋아요 0 조회수 248

인기 태그

인프런 TOP Writers

주간 인기글