화요일[비가 온대여]
1. 금일 텐서플로 수업 내용 공유
2. 정보처리기사 필기 공부
1. 수업내용 공유
º AutoEncoder
(有에서 有를 창조)
from tensorflow.keras.datasets import mnist from tensorflow.keras import models, layers import numpy as np import tensorflow as tf import matplotlib.pyplot as plt (X_train, _), (X_test, _) = mnist.load_data() X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype(float) / 255 X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype(float) / 255 (X_train, _), (X_test, _) = mnist.load_data() X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype(float) / 255 X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype(float) / 255 autoencoder = models.Sequential() #인코더 autoencoder.add(layers.Conv2D(16, kernel_size=3, padding='same', input_shape=(28, 28, 1), activation='relu')) autoencoder.add(layers.MaxPooling2D(pool_size=2)) autoencoder.add(layers.Conv2D(18, kernel_size=3, padding='same', activation='relu')) autoencoder.add(layers.MaxPooling2D(pool_size=2)) autoencoder.add(layers.Conv2D(18, kernel_size=3, strides=2, padding='same', activation='relu')) #디코더 autoencoder.add(layers.Conv2D(8, kernel_size=3, padding='same', activation='relu')) autoencoder.add(layers.UpSampling2D()) autoencoder.add(layers.Conv2D(8, kernel_size=3, padding='same', activation='relu')) autoencoder.add(layers.UpSampling2D()) autoencoder.add(layers.Conv2D(16, kernel_size=3, activation='relu')) autoencoder.add(layers.UpSampling2D()) autoencoder.add(layers.Conv2D(1, kernel_size=3, padding='same', activation='relu')) autoencoder.summary() autoencoder.compile(loss='binary_crossentropy', optimizer='adam') autoencoder.fit(X_train, X_train, epochs=50, batch_size=128, validation_data=(X_test, X_test)) random_test = np.random.randint(X_test.shape[0], size=5) ae_imgs = autoencoder.predict(X_test) plt.figure(figsize=(7, 2)) for i, image_idx in enumerate(random_test): ax = plt.subplot(2, 7, i + 1) plt.imshow(X_test[image_idx].reshape(28, 28)) #테스트할 이미지를 먼저 그대로 보여줍니다. ax.axis('off') ax = plt.subplot(2, 7, 7 + i +1) plt.imshow(ae_imgs[image_idx].reshape(28, 28)) #오토인코딩 결과를 다음열에 출력합니다. ax.axis('off') plt.show() |
º GAN
(無에서 有를 창조)
from tensorflow.keras.datasets import mnist from tensorflow.keras import models, layers from tensorflow.keras.layers import Dense, LeakyReLU import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import os if not os.path.exists('gan_images'): os.makedirs('gan_images') np.random.seed(3) tf.random.set_seed(3) #생성자 모델 generator = models.Sequential() generator.add(Dense(7*7*128, input_dim=100, activation=layers.LeakyReLU(0.2))) # 7by7 에 채널이 128개 generator.add(layers.BatchNormalization()) #학습의 효율을 높이기 위해 스케일링을 줄임 generator.add(layers.Reshape((7,7,128))) #1차원은 백터 2차원은 매트릭스 3차원이상은 tensor이라고 부름 generator.add(layers.UpSampling2D()) #차원계산이 중요함 픽셀하나를 동일한 픽셀 4개로 만듦 총면적이 4배로 커짐 generator.add(layers.Conv2D(64, kernel_size=5, padding='same')) generator.add(layers.BatchNormalization()) generator.add(layers.Activation(LeakyReLU(0.2))) generator.add(layers.UpSampling2D()) generator.add(layers.Conv2D(1, kernel_size=5, padding='same', activation='tanh')) #가짜그림 한 장을 만듦 generator.summary() #판별자 모델 discriminator = models.Sequential() discriminator.add(layers.Conv2D(64, kernel_size=5, strides=2, input_shape=(28,28,1) , padding='same')) #커널을 2픽셀씩 가게하는 의미 discriminator.add(layers.Activation(layers.LeakyReLU(0.2))) discriminator.add(layers.Dropout(0.3)) discriminator.add(layers.Conv2D(128, kernel_size=5, strides=2, padding='same')) discriminator.add(layers.Activation(layers.LeakyReLU(0.2))) discriminator.add(layers.Flatten()) discriminator.add(layers.Dense(1, activation='sigmoid')) #진짜냐 가짜냐 discriminator.summary() discriminator.compile(loss='binary_crossentropy', optimizer='adam') discriminator.trainable = False # 위조지폐와 경찰 그림과 같이노이즈로 만든 그림을 날렸을 때 오차를 리턴할 경우 학습을할 때 생성자 학습할 때는 기본 학습을 막아버리는 것 #가중치와 바이어스 갱신 x ginput = layers.Input(shape=(100,)) dis_output = discriminator(generator(ginput)) gan = models.Model(ginput, dis_output) gan.compile(loss='binary_crossentropy', optimizer='adam') gan.summary() def gan_train(epoch, batch_size, saving_interval): (X_train, _), (_, _) = mnist.load_data() # 변수를 받지 않기 위해 _ 로 비움 X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype(float) # 가로 28, 세로 28 픽셀이고 흑백이므로 1을 설정 # 28, 28, 1 채널로 reshape X_train = (X_train - 127.5) / 127.5 # 0~255 사이의 픽셀의 grayscale 값이 -1~1 로 변한다 # 활성화 함수가 tanh (픽셀값을 -1~1)이므로 해당 값으로 맞춰줘야 한다. true = np.ones((batch_size, 1)) fake = np.zeros((batch_size, 1)) for i in range(epoch): idx = np.random.randint(0, X_train.shape[0], batch_size) # idx = o부터 X_train 길이에서 batch_size 만큼 랜덤하게 가져온 숫자 imgs = X_train[idx] d_loss_real = discriminator.train_on_batch(imgs, true) # train_on_batch(x, y) 함수는 입력 값(x)과 레이블(y)을 받아서 딱 한 번 학습을 실시해 모델을 업데이트 # 역전파도 이루어진다 # 진짜를 판단하는데 생기는 손실 noise = np.random.normal(0, 1, (batch_size, 100)) # 0~1 사이에서 batch_size만큼 100개 gen_imgs = generator.predict(noise) d_loss_fake = discriminator.train_on_batch(gen_imgs, fake) # 가짜를 판단하는데 생기는 손실 d_loss = 0.5 * np.add(d_loss_real, d_loss_fake) g_loss = gan.train_on_batch(noise, true) # generator는 혼자서 진위여부를 판단할 수 없기 때문에 gan network 를 통째로 사용 print('epoch:%d' % i, ' d_loss:%.4f' % d_loss, ' g_loss:%.4f' % g_loss) if i % saving_interval == 0: #r, c = 5, 5 noise = np.random.normal(0, 1, (25, 100)) gen_imgs = generator.predict(noise) # Rescale images 0 - 1 gen_imgs = 0.5 * gen_imgs + 0.5 fig, axs = plt.subplots(5, 5) count = 0 for j in range(5): for k in range(5): axs[j, k].imshow(gen_imgs[count, :, :, 0], cmap='gray') axs[j, k].axis('off') count += 1 fig.savefig("gan_images/gan_mnist_%d.png" % i) |
º Reuters
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.keras.datasets import reuters from tensorflow.keras import models, layers from tensorflow.keras.preprocessing import sequence from tensorflow.keras import utils seed = 0 np.random.seed(seed) tf.random.set_seed(3) (X_train, y_train), (X_test, y_test) = reuters.load_data(num_words=1000, test_split=0.2) category = np.max(y_train) + 1 print('category: ', category) print('train set :', len(X_train)) print('test set : ', len(X_test)) X_train = sequence.pad_sequences(X_train, maxlen=100) X_test = sequence.pad_sequences(X_test, maxlen=100) y_train = utils.to_categorical(y_train) #원핫인코딩으로 바꾸겠다 y_test = utils.to_categorical(y_test) model = models.Sequential() model.add(layers.Embedding(1000, 100)) model.add(layers.LSTM(100, activation='tanh')) model.add(layers.Dense(46, activation='softmax')) model.summary() model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) history = model.fit(X_train, y_train, batch_size = 100, epochs=20, validation_data=(X_test, y_test)) print('Test Accuracy : %4.f' %(model.evaluate(X_test, y_test)[1])) y_vloss = history.history['val_loss'] y_loss = history.history['loss'] x_len = np.arange(len(y_loss)) plt.plot(x_len, y_vloss, marker='.', c="red", label='Testset_loss') plt.plot(x_len, y_loss, marker='.', c="blue", label='Trainset_loss') plt.legend(loc='upper right') plt.grid() plt.xlabel('epoch') plt.ylabel('loss') plt.show() |
º IMDB
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.keras.datasets import imdb from tensorflow.keras import models, layers from tensorflow.keras.preprocessing import sequence from tensorflow.keras import utils seed = 0 np.random.seed(seed) tf.random.set_seed(3) (X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=5000) X_train = sequence.pad_sequences(X_train, maxlen=100) X_test = sequence.pad_sequences(X_test, maxlen=100) model = models.Sequential() model.add(layers.Embedding(5000, 100)) model.add(layers.Dropout(0.5)) model.add(layers.Conv1D(64, 5, padding = 'valid', activation='relu', strides=1)) model.add(layers.MaxPooling1D(pool_size=4)) model.add(layers.LSTM(55)) model.add(layers.Dense(1)) model.add(layers.Activation('sigmoid')) model.summary() model.compile(loss='binary_crossentropy', optimizer = 'adam', metrics =['accuracy']) history = model.fit(X_train, y_train, batch_size=100, epochs=5, validation_data=(X_test, y_test)) print('Test Accuracy : %4.f' %(model.evaluate(X_test, y_test)[1])) y_vloss = history.history['val_loss'] y_loss = history.history['loss'] x_len = np.arange(len(y_loss)) plt.plot(x_len, y_vloss, marker='.', c="red", label='Testset_loss') plt.plot(x_len, y_loss, marker='.', c="blue", label='Trainset_loss') plt.legend(loc='upper right') plt.grid() plt.xlabel('epoch') plt.ylabel('loss') plt.show() |
2. 정보처리기사 필기 공부
º 수식표기법
Infix - > prefix | 연산자를 해당괄호 앞으로 옮김 |
Infix - > Postfix | 연산자를 해당괄호 뒤로 옮김 |
Postfix -> Infix | 인버한 피연산자 두개와 오른쪽의 연산자를 괄호로 묶고 연산자를 피 연산자 가운데로 옮김 |
Prefix -> Infix | 인접한 피연산자 두개와 왼쪽의 연산자를 괄호로 묶고 연산자를 해당 피연산자 사이로 이동시킴 |
Sort
삽입정렬, 쉘정렬, 선택정렬, 버블정렬
쉘정렬 _ 매개변수(h)의 값으로 서브파일을 구성 | O(n^1.5), O(n^n)
선택정렬 _ 모든 것에 최솟값을 찾아 앞으로 두고, n-1개를 다시 찾음
버블정렬_ 인접한 두개의 레코드 키 값을 비교
퀵 정렬_ 키를 기준으로 작은 값은 왼쪽에 큰 값은 오른쪽에 서브파일로 분해 | O(nlong2n), O(n^2)
힙 정렬_전이진 트리를 이용한 정렬 방식 | O(nlog2n)
2-way 합병 정렬_ 두 개의 커들을 한쌍으로 하여 각 쌍에 대하여 순서를 정함 | O(nlog2n)
기수정렬_ Queue를 이용 버킷의 순서대로 레코드를 꺼내여 정렬 |O(dn)
데이터 저장소{논리데이터 저장소 : 데이터, 데이터간의 연관성, 제약조건을 식별 조직화, 물리데이터저장소: 물리적 특성을 고려하여 하드웨어직인 저장장치에 저장}
데이터베이스
-통합데이터 : 중복 x
-저장된데이터
-운영데이터 : 반드시 필요한 자료
-공용데이터 : 공통으로 소유하고 있는 자료
DBMS
-정의기능 : 구조에 대한 정의, 이요방식, 제약조건 명시
-조작기능 : 데이터검색, 갱신, 삽입, 삭제 등 사용자와 DB사이의 수단을 제공
-제어기능 : 무결성유지, 보안, 권한, 병행제어
데이터베이스 MS발전 배경은 종속성과 중복성을 배제함에 있다.
스키마
외부 : 데이터 베이스의 논리적 구조를 정의
개념 : 전체적인 논리구조, 개체관계와 제약조건을 나타내고, 데이터베이스의 접근 권한 , 보안 및 무결성
내부 : 물리적 저장장치에서 본 데이터 베이스 구조로서, 실제로 DB에 저장될 레코드 형식을 정의하고 저장데이터 항목의 표현 방법, 내부레코드의 물리적 순서등을 나타낸다.
트랜젝션
데이터 입출력을 소프트웨어에 구현하기위해sql코드로 삽입,or 객체와 데이터 연결 = 데이터 접속이라고도 함
SQL을 통한 논리적 기능 수행하기위한 한 단위, 모두 수행되어야할 일련의 연산
관계대수 : RDB에서 원하는 정보와 그 정보를 검색하기위해 어떻게 유도하는가를 기술
관계해석 : RDB에서 사용하는 방법으로 원하는 정보를 정의할 때 계산수식을 사용
데이터정의어 : schma, Domain, Table, Viwe, Index를 정의 변경 삭제
데이터 조작어 : 질의어를 통해 실제 DB조작
데이터 제어어 : 데이터의 보안, 무결성, 회복, 병행 수행 제어등을 정의하는데 병행
transation: 일련의 연산 작업의 논리적 단위
트렌젝션을 제어하기위해 사용하는 명령어 _ TCL
-commit : 변경내용을 dB에 반영하는 명령어
-rollback : 비정상적으로 종료되었을 경우 트랜젝션 명령을 종료시키고, 이전 시점으로 되돌리는 명령어
-cheakpoint(savepoint_ : rollback시점을 정의
깊이 우선탐색(DFS)
정점에서 자식노드방향으로 운행하면서 현제노드와 자식노드가 있을 때 자식노드를 먼저 탐색하는기법
절차형 SQL
효율이 떨어지지만 연속작업을 할때 적합
SQL은 DBMS에 직접실행되기에 입력패킷, 출력패킷이 적은편
블록구조 -> 기능별 모듈화가가능
프로시저 : 특정기능을 수행하는 트랜젝션언어로 호출을 통해 미리작성한 SQL문을 수행
트리거 : DBS에서 이벤트가 발생할 때 같이 관련작업이 자동수행
사용자 정의함수 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 녀속적으로 처리, 종료시 return을 사용하여 처리결과를 단일값으로 반환
//yesterday wished to today list
. 좋은 인상 남기기 😒
. 말 실수하지 않기 👎
. 긍정적으로 생각하기 ✔
tomorrow wish list
. 긍정적으로 생각하기
. 좋게 생각하기
. 한번더 생각하고 말하기
'IT To do and To was' 카테고리의 다른 글
22년 4월 14일_아이디어 및 파트 배분_UI 설계서 작성..(+정처기 필기 공부 (0) | 2022.04.14 |
---|---|
22년 4월 13일_final project start!(아이디어 회의) (0) | 2022.04.13 |
22년 4월 11일_자연어처리 + 정처기 필기 (0) | 2022.04.11 |
22년 4월 10일_정처기 공부 (0) | 2022.04.10 |
22년 4월 9일_센트럴파크 & 본가 만두전골 (+ 정처기 공부 (0) | 2022.04.09 |