[Tensorflow] ValueError: 'x' has shape (h, w, c) before the loop, but shape (None, w, c) after one iteration. Use tf.autograph.experimental.set_loop_options to set shape invariants.
·
Tensorflow
제목이 좀 긴데, 해당 에러는 그래프 연산 모드에서 반복문을 사용할 경우 마주할 수 있는 에러이다. ValueError: 'x' has shape (h, w, c) before the loop, but shape (None, w, c) after one iteration. Use tf.autograph.experimental.set_loop_options to set shape invariants. 오류가 난 코드를 함께 보자. def cutout( x, patch_count, patch_base_factor, patch_width_factor, patch_height_factor ): out_x = x + 0. for i in range(patch_count): pw = tf.random.uniform..
[데이터 통신] Media Access Control(MAC)
·
CS/데이터 통신
서론앞으로 node라는 말을 station이라고 바꿔서 말할 예정이다. 따라서 이후 내용에서 station이라고 하면, node라고 생각하자.    Media라고 하면, 두 station를 연결하는 link(선), 그 자체를 말한다. 즉, 두 station은 유선으로 연결 되어있을 수도 있고, 무선으로 연결 되어있을 수도 있다. 이 선 자체에 접근하는 이유는 당연히 뭔가 데이터를 전송하거나 받는 행위를 하기 위해서 그렇다. 한 단어로 말하자면, 통신! 이다.    이 선에 접근하는 것(Media Access)을 제어(Control)하는 이유는 제어하지 않으면 뭔가 안 좋은 일이 일어나기 때문이다. 예를 들어보자. 위와같이 구성된 네트워크가 존재한다고 할때, 오른쪽 3대의 컴퓨터가 서로 통신을 위해 데이터..
[데이터 통신] Data Link Control(DLC)
·
CS/데이터 통신
Data Link Contorl(DLC) 이전 내용에서는 매번 데이터가 전송된다고만 했지, 정확히 각 계층에서 어떤 일이 일어나는지에 대해서는 언급이 없었다. 오늘은 data link 계층에서 데이터를 어떻게 다루는지에 대해 알아보려고 한다. 그래서 이름도 data link control(DLC)이다. Data link control이 정확히 뭘 하는건데? 라고 물어본다면, 크게 세 가지로 나눌 수 있다. 1. Framing 2. Flow Control 3. Error Control 각각이 뭔지에 대해 하나씩 알아보도록 하자. Framing Data link 계층은 상위 계층인 Network 계층에서 데이터를 받아 주소를 붙이고 Physical 계층을 통해 목적지로 보내곤 했다. 이때 "주소를 붙이고" ..
[데이터 통신] Error Detection 과 Correction
·
CS/데이터 통신
오류의 종류 오류(Error)는 크기에 따라 두가지로 나뉜다. 보낼때의 데이터와 받을때의 데이터는 정확하게 일치해야하나, 전송 과정에서 의도치않게 값이 바뀔 수가 있다. Single-bit error는 데이터중 하나의 비트가 값이 바뀐것을 말한다. Burst error는 2개 이상의 비트가 바뀐것을 발한다. Single-bit error는 위와같이 하나의 비트만 바뀐것을 말하며, 이 바뀐 비트는 Corrupted bit 라고 불린다. Burst error는 2개 이상의 비트가 corrupted bit가 된것을 말하며, 위 사진은 첫번째 corrupted bit 부터 마지막 corrupted bit까지 총 8비트가 에러라고 보고있다. 생각해보자. Corrupted bit를 찾아서 다시 정상적인 비트로 바꾸..
[데이터 통신] Data-link Layer 집중탐구
·
CS/데이터 통신
우리가 이전 포스팅부터 열심히 공부한 신호관련 내용들은 "데이터 통신"이라는 것에서 작은 축에 불과하다. 물리적으로 보내거나 받는 부분을 배운것이고, 이는 Physical Layer(물리 계층)라는 계층에 해당된다. 오늘은 Physical Layer를 거치기 전 Layer인 Data-link Layer(데이터 링크 계층)에 대해 알아보고자 한다. Node 와 Link 데이터 링크 계층에서 통신은 Node-to-Node라고 표현한다. 둘중에 하나는 분명 데이터를 보내는 쪽을 가리킬거고, 다른 node는 데이터를 받는 쪽을 가리킬것이다. 그리고 데이터는 node들을 연결해주는 link를 통해 전송된다. 겉으로는 별거 아닌 내용이다. 우리가 인터넷으로 유튜브를 본다고 해보자. 유튜브는 인터넷없이는 보이지 않는..
[데이터 통신] Spread Spectrum
·
CS/데이터 통신
그동안은 신호를 얼마나 효율적으로 보내는가? 에 대해 집중했다. 최대한 많은 데이터를 적은 신호로 정확하게 보내는 방법이라던지, 대역폭을 최대한 활용한다던지.. 등등 현실적인 고민들이었지만, 우리가 보내는 데이터들이 뭔지 보고싶어하는 변태들이 있기 마련이다. 특히 무선통신에 있어서 도청에 대한 위험은 항상 존재하고, 도청이 아니라 신호를 방해(Jamming)하는 식의 사건들도 있어왔다. 따라서 우리는 오늘 배울 spread spectrum 방법을 알아보려한다. 기본적으로 대역폭을 최대한 늘려버리는 방법이 있다. 대역폭이 좁으면 좁을 수록 특정 주파수만 찾으면 도청이나 방해 공작(Jamming)을 수행하기 쉽다. 따라서 최대한 대역폭을 늘려서 데이터가 전송되는 주파수를 찾지 못하게 만드는 방법이다. Fre..
[데이터 통신] Multiplexing
·
CS/데이터 통신
Multiplexing (다중화) 논리회로에서 나왔던 MUX(Multiplexer)는 다수의 신호중 하나의 신호를 골라서 보내는 방법이었다. 그러나 지금부터 알아볼 Multiplexing은 다수의 신호를 하나의 데이터 링크에 동시에 보내는 방법을 말한다. 받는 쪽에서는 Demultiplexing 하여 이 신호를 분리하여 알맞은 라인에 보내게 된다. Multiplexing은 신호의 종류에 따라 달라지는데 총 3가지가 있다. Frequency-division multiplexing은 아날로그 신호에 대해서 다중화를 진행한다. Wavelength-division multiplexing은 신호를 빛의 형태로 보낼 때 사용하는 방법이다. Time-division multiplexing은 디지털 신호에 대해 사용하..
[데이터 통신] Analog-to-Analog 변환에 대해
·
CS/데이터 통신
아날로그 데이터를 아날로그 신호로 변환하여 보내는 방법에 대해 알아보자. 변환은 Digital-to-Analog 변환과 같이 진폭(Amplitude), 주파수(Frequency) 그리고 위상(Phase)에 대해 방법을 낼 수 있다. 각각 AM, FM, PM 이라고 줄여 부른다. 라디오를 잘 아는 분들이면 익숙하겠지만, AM과 FM은 들어보셨을 수도 있다. Amplitude Modulation (AM) AM 전송에서는 당연히 진폭을 변화시켜서 신호로 바꾼다. 가지고 있는 아날로그 데이터를(Modulating signal)를 carrier signal과 더해서 보내는 방식이다. 따라서 주파수는 carrier signal이 가진 주파수와 일치하게 된다. 대역폭은 변조할 신호(즉, 가지고있는 아날로그 데이터, ..
[데이터 통신] Digital-to-Analog 변환에 대해
·
CS/데이터 통신
이름에서도 알 수 있듯, 디지털(이산적인) 신호를 아날로그(연속적인) 신호로 변환하는 것에 대해 다룰 예정이다. 보내는 쪽은 디지털 데이터를 가지고 있고 변조(Modulation)을 통해 아날로그 신호로 바꿔서 전달한다. 받는 쪽에서는 다시 아날로그 신호를 역변조(Demodulation)을 통해 디지털 신호로 바꿔서 디지털 데이터를 수신하게 된다. 들어가기 전에 두가지만 알아두자 1. Bandwidth (대역폭) 디지털 데이터를 아날로그 신호를 전송하기 위해 필요한 대역폭은 Signal rate에 비례한다. https://ideadummy.tistory.com/102 [데이터 통신] Line coding에 대해 Line coding Line coding은 디지털 데이터를 디지털 신호로 바꾸는 것을 말한다..
[데이터 통신] Block coding과 Analog to Digital 변환
·
CS/데이터 통신
Block codingBlock coding은 동기화나 오류 검출을 하는 것에 특화된 방법이다. 동기화나 오류 검출을 위해 line coding과 다르게 여분의(redundancy) 정보를 더 포함한다. 당연히 자원이 더 들 수 밖에 없다는 것을 어렵지 않게 알 수 있다.  일반적으로, block coding은 m개의 비트로 이루어진 데이터를 n개의 비트로 변환한다. 그럼 $m > n$ 인거면 이득 아닌가? 라고 생각했다면 여분의 정보를 포함한다는 소개를 안 읽었으니 마음이 좀 아플거 같다. 기존 $m$개의 비트의 여분의 비트를 더했으니 항상 $m  그리고 $m        4B/5BBlock coding의 예시로 4B/5B 방식을 소개하려 한다. 우선 이 방식이 왜 나왔는 가를 먼저 이해해보자.   4..