728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

17강 vim 편집기

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

vim editor 시작

[j@hj0216 ~/dd]$ vi
# 이름없는 파일에서 작업, 저장 시 이름 부여 필요
[j@hj0216 ~/dd]$ vi a1
# a1 파일 내용 수정
[j@hj0216 ~/dd]$ vi a2
# a2 파일 생성

esc: 작업 종료

i 끼워넣기

:w 저장

:w 파일이름 '파일이름'으로 저장

:q 종료

:q! 강제 종료

:wq 저장 후 종료

:se nu 행번호 부여

:se nonu 행번호 삭제

dd 1줄씩 지우기

 

vimtutor

[j@hj0216 ~/dd]$ vimtutor
                             LESSON 1 요약

  1. 커서를 움직일 때에는 화살표 키나 hjkl 키를 이용합니다.
         h (왼쪽)       j (아래)       k (위)       l (오른쪽)
  2. 쉘 프롬프트에서 빔을 시작하려면 vim FILENAME <ENTER>
  3. 수정한 내용을 무시한 채로 빔에서 빠져나가려면   <ESC>   :q!   <ENTER>
                     저장한 후 빔에서 빠져나가려면   <ESC>   :wq   <ENTER>
  4. 명령 모드에서 커서가 위치한 곳의 글자를 지우려면   x  를 입력합니다.
  5. 명령 모드에서 커서가 위치한 곳에 텍스트를 삽입하려면
         i   를 누른 후 텍스트를 입력하고  <ESC> 를 누릅니다.
참고: <ESC>는 명령 모드로 돌아가는 데 쓰며, 원치 않는 명령이나 완전히 입력되지
      않은 명령을 취소하는 데에도 씁니다.
                               LESSON 2 요약
                               
  1. 커서가 위치한 곳부터 단어의 끝까지 지우려면:    dw
  2. 커서가 위치한 곳부터 줄 끝까지 지우려면:    d$
  3. 줄 전체를 지우려면:    dd
  4. 명령 모드에서 내리는 명령의 형식은 다음과 같습니다:
       [횟수]   명령   대상    또는    명령   [횟수]   대상
     여기서:
       횟수 - 그 명령을 몇 번 반복할 것인가
       명령 - 어떤 명령을 내릴 것인가 ( 예를 들어, 삭제인 경우는 d )
       대상 - 명령이 동작할 대상, 예를 들어 w (단어), $ (줄의 끝) 등.
  5. 이전 행동을 취소하려면:                 u   (소문자 u)
     한 줄에서 수정한 것을 모두 취소하려면:  U   (대문자 U)
     취소한 것을 다시 실행하려면:            CTRL-R
                               LESSON 3 요약

  1. 이미 지운 내용을 되돌리려면,  p  를 누르십시오. 이 명령은 커서 *다음에*
     지워진 내용을 붙입니다(PUT). (한 줄을 지운 경우에는 커서 다음 줄에
     지워진 내용이 붙습니다.)
  2. 커서 아래의 글자를 치환하려면(REPLACE),  r  을 누른 후 원래 글자 대신
     바꾸어 넣을 글자를 입력합니다.
  3. 변환 명령(CHANGE)은 커서에서 부터 지정한 대상의 끝까지 바꿀 수 있는
     명령입니다. 예를 들어, 커서 위치에서 단어의 끝까지 바꾸려면,  cw  를
     입력하면 되며,  c$  는 줄 끝까지 바꾸는 데 쓰입니다.
  4. 변환 명령의 형식은 다음과 같습니다:
         [횟수]   c   대상       또는       c   [횟수]   대상
                               LESSON 4 요약

  1. CTRL-g  는 파일의 상태와 파일 내에서의 현재 위치를 표시합니다.
     SHIFT-G  는 파일의 끝으로 이동합니다. 줄번호를 입력한 후 SHIFT-G를
     입력하면, 그 줄로 이동합니다.
  2.  / 를 입력한 후 문구를 입력하면 그 문구를 아랫방향으로 찾습니다.
      ? 를 입력한 후 문구를 입력하면 윗방향으로 찾습니다.
     검색 후, n 을 입력하면 같은 방향으로 다음 문구를 찾으며,
     Shift-N 을 입력하면 반대 방향으로 찾습니다.
  3. 커서가 (,),[,],{,} 위에 있을 때에  % 를 입력하면 상응하는 짝을
     찾아갑니다.

  4. 어떤 줄에 처음 등장하는 old를 new로 바꾸려면          :s/old/new
     한 줄에 등장하는 모든 old를 new로 바꾸려면            :s/old/new/g
     두 줄 #,# 사이에서 치환을 하려면                      :#,#s/old/new/g
     바꿀 때마다 확인을 거치려면 'c'를 붙여서              :%s/old/new/gc
                               LESSON 5 요약

  1.  :!command  를 이용하여 외부 명령을 실행합니다.
      유용한 예:
         (MS-DOS)         (Unix)
          :!dir            :!ls            -  디렉토리의 목록을 보여준다.
          :!del FILENAME   :!rm FILENAME   -  FILENAME이라는 파일을 지운다.
  2.  :w FILENAME  하면 현재 빔에서 사용하는 파일을 FILENAME이라는 이름으로
      디스크에 저장합니다.
  3.  :#,#w FILENAME  하면 #부터 #까지의 줄을 FILENAME이라는 파일로 저장합니다
.
  4.  :r FILENAME  은 디스크에서 FILENAME이라는 파일을 불러들여서 커서 위치
      뒤에 현재 파일을 집어넣습니다.
                               LESSON 6 요약

  1.  o 를 입력하면 커서 *아래에* 한 줄이 열리며, 커서는 편집 모드로
     열린 줄 위에 위치하게 됩니다.
     대문자  O  를 입력하면 커서가 있는 줄의 *위로* 새 줄을 열게 됩니다.
  2.  a 를 입력하면 커서 *다음에* 글을 입력할 수 있습니다.
     대문자  A  를 입력하면 자동으로 그 줄의 끝에 글자를 추가하게 됩니다.
  3. 대문자  R  을 입력하면 <ESC> 를 눌러서 나가기 전까지 바꾸기 모드가 됩니다
.
  4. ":set xxx" 를 하면 "xxx" 옵션이 설정됩니다.

 

728x90
728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

16강 패키지 관리(rpm/yum)

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

관리자로 로그인

login as: j
j@127.0.0.1's password:
Last login: Tue Jan 24 21:43:10 2023 from gateway
[j@hj0216 ~]$ su -
암호:
마지막 로그인: 일  1월 15 22:50:18 KST 2023 일시 tty1
[root@hj0216 ~]# exit
[j@hj0216 ~]$

➕ ctrl d: logout

 

Linux package = Window program

설치된 pkg 목록 조회

[root@hj0216 ~]# rpm -qa | nl
[root@hj0216 ~]# rpm -qa > rpmList

rpm: redhat package manager

→ 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구

-qa:query all

nl: number line

rpm -qa > rpmList: 최초 설치 pkg 목록 rpmList라는 파일을 생성해서 저장

 

설치된 pkg 목록 검색

[root@hj0216 ~]# rpm -qa | grep ftp

grep ftp: ftp 문자열이 들어간 설치 pkg 목록 조회

 

pkg 설치 전 네트워크 연결 확인 test

[root@hj0216 ~]# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=33.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=36.4 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=35.2 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 33.710/35.135/36.493/1.147 ms

 

pkg 설치

[root@hj0216 ~]# yum -y install ftp
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror.navercorp.com
 * extras: mirror.navercorp.com
 * updates: mirror.navercorp.com
base                 | 3.6 kB     00:00
extras               | 2.9 kB     00:00
updates              | 2.9 kB     00:00
(1/4): base/7/x86_64/g | 153 kB   00:00
(2/4): extras/7/x86_64 | 249 kB   00:00
(3/4): base/7/x86_64/p | 6.1 MB   00:03
(4/4): updates/7/x86_6 |  19 MB   00:08
Resolving Dependencies
--> Running transaction check
---> Package ftp.x86_64 0:0.17-67.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================
 Package
       Arch     Version        Repository
                                       Size
============================================
Installing:
 ftp   x86_64   0.17-67.el7    base    61 k

Transaction Summary
============================================
Install  1 Package

Total download size: 61 k
Installed size: 96 k
Downloading packages:
경고: /var/cache/yum/x86_64/7/base/packages/ftp-0.17-67.el7.x86_64.rpm: Header V3 RSA/SH                                  A256 Signature, key ID f4a80eb5: NOKEY
Public key for ftp-0.17-67.el7.x86_64.rpm is not installed
ftp-0.17-67.el7.x86_64 |  61 kB   00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb124c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-6.1810.2.el7.centos.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : ftp-0.17-67.el7.x86_64   1/1
  Verifying  : ftp-0.17-67.el7.x86_64   1/1

Installed:
  ftp.x86_64 0:0.17-67.el7

Complete!
[root@hj0216 ~]# rpm -qa | grep ftp
ftp-0.17-67.el7.x86_64

yum -y install ftp: ftp 관련 pkg 설치

-y: 설치 확인 질문에 대해 미리 y 응답

 

pkg 삭제

[root@hj0216 ~]# rpm -e ftp
[root@hj0216 ~]# rpm -qa | grep ftp

-e: erase

 

 

 

728x90
728x90

기본 환경: IDE: VS code, Language: Python

 

CNN(Convolution Neural Network, 합성곱 신경망)

: 영상처리에 많이 활용되는 합성곱을 사용하는 신경망 구조

기존처럼 데이터에서 지식을 추출해 학습하는 것이 아니라 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조

 

Conv2D with Maxpooling

# cnn_conv2D_maxPooling2D.py

import numpy as np

from tensorflow.keras.datasets import mnist, cifar10, cifar100
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, Dropout, MaxPooling2D
# Maxpooling: 연산이 아니기때문에 model pkg가 아닌 layers pkg에 삽입, 2D: 이미지
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

path = './_save/'


# 1. data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
'''
x_train.shape: (60000, 28, 28) # 행(28), 열(28), 흑백(1-생략)인 이미지 데이터 60000개
y_train.shape: (60000,) # 이미지에 대한 값을 수치화
'''

# CNN Conv2D 처리하기 위해 4D(Tensor)화
x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)

'''
# y_train에서 동일한 값의 빈도수 반환
print(np.unique(y_train, return_counts=True))
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8), # y_calss
array([5923, 6742, 5958, 6131, 5842, 5421, 5918, 6265, 5851, 5949], dtype=int64) y_class의 개수)
'''


# 2. Model
model = Sequential()
model.add(Conv2D(filters=128,
                 kernel_size=(3, 3),
                 strides=1,
                 padding='same',
                 input_shape=(28, 28, 1),
                 activation='relu'))
'''
padding=valid
output_shape=(26,26,128)
# output shape = input_shape - kernel_size +1 (Not using padding)
padding=same
output_shape=(28,28,128)
'''
model.add(MaxPooling2D())
# output_shape=(14, 14, 128)
# Parameter=0 (연산 X)
model.add(Conv2D(filters=64,
                 kernel_size=(3, 3),
                 padding='same'))
# Sequential Model output->input이므로 입력값 작성 생략
model.add(Conv2D(filters=64,
                 kernel_size=(3, 3),
                 padding='same'))
model.add(MaxPooling2D())
model.add(Conv2D(filters=32,
                 kernel_size=(3, 3),
                 padding='same'))
model.add(Flatten()) # input_dim=7*7*32 (column)
model.add(Dense(32, activation='relu'))
# batch_size(총 훈련 필요 대상)=60000
model.add(Dropout(0.3))
model.add(Dense(10, activation='softmax')) # y_class=10
model.summary()
'''
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #
=================================================================
 conv2d (Conv2D)                 (None, 28, 28, 128)       1280

 max_pooling2d (MaxPooling2D)    (None, 14, 14, 128)       0

 conv2d_1 (Conv2D)               (None, 14, 14, 64)        73792

 conv2d_2 (Conv2D)               (None, 14, 14, 64)        36928

 max_pooling2d_1 (MaxPooling2D)  (None, 7, 7, 64)          0

 conv2d_3 (Conv2D)               (None, 7, 7, 32)          18464

 flatten (Flatten)               (None, 1568)              0

 dense (Dense)                   (None, 32)                50208 = 1568*32 + 32

 dropout (Dropout)               (None, 32)                0

 dense_1 (Dense)                 (None, 10)                330

=================================================================
Total params: 181,002
Trainable params: 181,002
Non-trainable params: 0
_________________________________________________________________
'''


# 3. Compile and train
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])
# one-hot encoding 안했으므로, sparse_categorical_crossentropy

earlyStopping = EarlyStopping(monitor='val_loss', mode='min', patience=32, restore_best_weights=True, verbose=1)


modelCheckPoint = ModelCheckpoint(monitor='val_loss', mode='auto', verbose=1,
                                   save_best_only=True,
                                   filepath='cnn_conv2D_maxPooling2D.hdf5')


model.fit(x_train, y_train, epochs=256, batch_size=128,
                    validation_split=0.2,
                    callbacks=[earlyStopping, modelCheckPoint],
                    verbose=1)

model.save(path+'cnn_conv2D_maxPooling2D_save_model.h5')


# 4. evaluate and predict
result = model.evaluate(x_test, y_test)
print("loss: ", result[0])
print("acc: ", result[1])



'''
Result
loss:  0.049012500792741776
acc:  0.9872999787330627

'''

 

⭐ Conv2D와 MaxPooling2D 차이

from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D


# 1. data
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# CNN Conv2D 처리하기 위해 4D(Tensor)화
x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)


# 2. Model
model = Sequential()
model.add(Conv2D(filters=128,
                 kernel_size=(3, 3),
		 padding='same',
                 strides=1,
                 input_shape=(28, 28, 1),
                 activation='relu'))
model.add(MaxPooling2D(pool_size=(5, 5)))
model.summary()
'''
Model: "sequential()"
______________________________________
 Layer (type)      Output Shape
======================================
(Conv2D)           (None, 26, 26, 128) -> stride: defualt=1, 자르고 난 나머지 연산 대상에 포함
(MaxPooling2D)     (None, 5, 5, 128)   -> stride: default=kernel_size(겹치지 않게 진행), 자르고 난 나머지 연산 대상에 미포함

'''

1. 잔여 Data 처리

2. Strides Default

 

CNN → DNN

1. reshape → DNN

# dnn_with_cnn_data1.py

import numpy as np

from tensorflow.keras.datasets import mnist, cifar10, cifar100, fashion_mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, Dropout, MaxPooling2D
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

path = './_save/'


# 1. data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
'''
x_train.shape: (60000, 784), x_train.shape: (60000,)
x_test.shape: (10000, 784), x_test.shape: (10000,)
'''

# DNN Model을 위한 작업
# Flatten이 아닌 reshape을 통해서 2차원으로 변경
x_train = x_train.reshape(60000, 28*28) 
x_test = x_test.reshape(10000, 28*28)

x_train=x_train/255.
x_test=x_test/255.


# 2. Model
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(784,)))
model.add(Dropout(0.3))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(32, activation='linear'))
model.add(Dense(10, activation='softmax'))
model.summary()


# 3. Compile and train
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])

earlyStopping = EarlyStopping(monitor='val_loss', mode='min', patience=32, restore_best_weights=True, verbose=1)

modelCheckPoint = ModelCheckpoint(monitor='val_loss', mode='auto', verbose=1,
                                   save_best_only=True,
                                   filepath='dnn_with_cnn_data1_MCP.hdf5')

model.fit(x_train, y_train, epochs=256, batch_size=32,
                    validation_split=0.2,
                    callbacks=[earlyStopping, modelCheckPoint],
                    verbose=1)

model.save(path+'dnn_with_cnn_data1_save_model.h5')


# 4. evaluate and predict
result = model.evaluate(x_test, y_test)
print("loss: ", result[0])
print("acc: ", result[1])



'''
Result(CNN)
loss:  0.16121244430541992
acc:  0.9692999720573425

Result(DNN)
loss:  0.08280020207166672
acc:  0.9758999943733215

'''

 

2. Flatten

# dnn_with_cnn_data2.py

import numpy as np

from tensorflow.keras.datasets import mnist, cifar10, cifar100, fashion_mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, Dropout, MaxPooling2D
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

path = './_save/'


# 1. data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
'''
x_train.shape: (60000, 28, 28), x_train.shape: (60000,)
x_test.shape: (10000, 28, 28), x_test.shape: (10000,)
'''

x_train=x_train/255.
x_test=x_test/255.


# 2. Model
model = Sequential()
model.add(Flatten()) # 모델 초반부에 Flatten을 통한 1차원 배열로 변환 input_dim=28*28*1=784 (column)
# 차원: []의 개수
model.add(Dense(128, activation='relu', input_shape=(784,)))
model.add(Dropout(0.3))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(32, activation='linear'))
model.add(Dense(10, activation='softmax'))


# 3. Compile and train
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])

earlyStopping = EarlyStopping(monitor='val_loss', mode='min', patience=32, restore_best_weights=True, verbose=1)

modelCheckPoint = ModelCheckpoint(monitor='val_loss', mode='auto', verbose=1,
                                   save_best_only=True,
                                   filepath='dnn_with_cnn_data2_MCP.hdf5')

model.fit(x_train, y_train, epochs=256, batch_size=32,
                    validation_split=0.2,
                    callbacks=[earlyStopping, modelCheckPoint],
                    verbose=1)

model.save(path+'dnn_with_cnn_data2_save_model.h5')


# 4. evaluate and predict
result = model.evaluate(x_test, y_test)
print("loss: ", result[0])
print("acc: ", result[1])



'''
Result(CNN)
loss:  0.16121244430541992
acc:  0.9692999720573425

Result(DNN)
loss:  0.08222146332263947
acc:  0.977400004863739

'''

 

3. Dense → Flatten

# dnn_with_dnn_data3.py

import numpy as np

from tensorflow.keras.datasets import mnist, cifar10, cifar100, fashion_mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, Dropout, MaxPooling2D # 2D: 이미지
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

path = './_save/'


# 1. data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
'''
x_train.shape: (60000, 28, 28), x_train.shape: (60000,)
x_test.shape: (10000, 28, 28), x_test.shape: (10000,)
'''

x_train=x_train/255.
x_test=x_test/255.


# 2. Model
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(28,28)))
# (data_num, 28), input_dim=28
model.add(Dropout(0.3))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(32, activation='linear'))
model.add(Flatten())
model.add(Dense(10, activation='softmax'))
model.summary()
'''
# Dense Model은 2차원 이상을 input으로 받는 것이 가능

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #
=================================================================
 dense (Dense)               (None, 28, 128)           3712
                            # output_layer = conv2D filter
 dense_1 (Dense)             (None, 28, 64)            8256

 dense_2 (Dense)             (None, 28, 32)            2080

 flatten (Flatten)           (None, 896)               0

 dense_3 (Dense)             (None, 10)                8970

=================================================================
Total params: 23,018
Trainable params: 23,018
Non-trainable params: 0
_________________________________________________________________
'''


# 3. Compile and train
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])

earlyStopping = EarlyStopping(monitor='val_loss', mode='min', patience=32, restore_best_weights=True, verbose=1)

modelCheckPoint = ModelCheckpoint(monitor='val_loss', mode='auto', verbose=1,
                                   save_best_only=True,
                                   filepath='dnn_with_cnn_data3_MCP.hdf5')


model.fit(x_train, y_train, epochs=256, batch_size=32,
                    validation_split=0.2,

    callbacks=[earlyStopping, modelCheckPoint],
                    verbose=1)

model.save(path+'dnn_with_cnn_data3_save_model.h5')


# 4. evaluate and predict
result = model.evaluate(x_test, y_test)
print("loss: ", result[0])
print("acc: ", result[1])



'''
Result(CNN)
loss:  0.16121244430541992
acc:  0.9692999720573425

Result(DNN)
loss:  0.10574663430452347
acc:  0.9707000255584717

'''

 

➕ CNN Functional Model

# functional_model_with_cnn.py

import numpy as np

from tensorflow.keras.datasets import mnist, cifar10, cifar100, fashion_mnist
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Conv2D, Flatten, Dense, Dropout, MaxPooling2D, Input
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

path = './_save/'


# 1. data
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
# print(x_train.shape, y_train.shape) # (60000, 28, 28) (60000,)

x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)

x_train=x_train/255.
x_test=x_test/255.


# 2. Model
input1 = Input(shape=(28,28,1))
dense1 = Conv2D(filters=128,
                 kernel_size=(3, 3),
                 padding='same',
                 strides=1,
                 input_shape=(28, 28, 1),
                 activation='relu')(input1)
dense2 = MaxPooling2D()(dense1)
dense3 = Conv2D(filters=64,
                 kernel_size=(3, 3),
                 padding='same')(dense2)
dense4 = MaxPooling2D()(dense3)
dense5 = Conv2D(filters=32,
                 kernel_size=(3, 3),
                 padding='same')(dense4)
dense6 = Flatten()(dense5)
dense7 = Dense(32, activation='relu')(dense6)
output1 = Dense(10, activation='softmax')(dense7)
model = Model(inputs=input1, outputs=output1)
model.summary()


# 3. Compile and train
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])

earlyStopping = EarlyStopping(monitor='val_loss', mode='min', patience=32, restore_best_weights=True, verbose=1)

modelCheckPoint = ModelCheckpoint(monitor='val_loss', mode='auto', verbose=1,
                                   save_best_only=True,
                                   filepath=path+'functional_model_with_cnn_MCP.hdf5')

model.fit(x_train, y_train, epochs=256, batch_size=64,
                    validation_split=0.2,
                    callbacks=[earlyStopping, modelCheckPoint],
                    verbose=1)

model.save(path+'functional_model_with_cnn_save_model.h5')


# 4. evaluate and predict
result = model.evaluate(x_test, y_test)
print("loss: ", result[0])
print("acc: ", result[1])



'''
Result
loss:  0.2593150734901428
acc:  0.9047999978065491

'''

 

DNN 데이터의 CNN 처리

# dnn_with_cnn_data_kaggle_bike.py

import pandas as pd
import numpy as np

from tensorflow.keras.models import Sequential, Model, load_model
from tensorflow.keras.layers import Dense, Input, Dropout, Conv2D, Flatten, MaxPooling2D
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.metrics import mean_squared_error, r2_score

path2 = './_save/'


# 1. Data
path = './_data/bike/'
train_csv = pd.read_csv(path+'train.csv', index_col=0)
test_csv = pd.read_csv(path+'test.csv', index_col=0)
submission = pd.read_csv(path+'sampleSubmission.csv', index_col=0)
train_csv = train_csv.dropna()

x = train_csv.drop(['casual', 'registered', 'count'], axis=1)
y = train_csv['count']

x_train, x_test, y_train, y_test = train_test_split(
    x, y,
    shuffle=True,
    train_size=0.7,
    random_state=123
)

# scaler = StandardScaler()
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
test_csv = scaler.transform(test_csv)

print(x_train.shape, x_test.shape)
print(test_csv.shape) # (6493, 8)


x_train = x_train.reshape(7620, 4, 2, 1)
x_test = x_test.reshape(3266, 4, 2, 1)


# 2. Model(Sequential)
model = Sequential()
model.add(Conv2D(128, (2,2), padding='same', activation='relu', input_shape=(4,2,1)))
model.add(MaxPooling2D(pool_size=(2, 1)))
model.add(Conv2D(64, (2,2), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 1)))
model.add(Conv2D(32, (2,2), padding='same', activation='relu'))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1)) # 분류모델이 아니므로 끝이 softmax가 아니어도 됨
model.summary()


'''
# 2. Model(Function)
input1 = Input(shape=(13,))
dense1 = Dense(64, activation='relu')(input1)
drop1 = Dropout(0.3)(dense1)
dense2 = Dense(64, activation='sigmoid')(drop1)
drop2 = Dropout(0.2)(dense2)
dense3 = Dense(32, activation='relu')(drop2)
drop3 = Dropout(0.15)(dense3)
dense4 = Dense(32, activation='linear')(drop3)
output1 = Dense(1, activation='linear')(dense4)
model = Model(inputs=input1, outputs=output1)
model.summary()

summray
node를 random하게 추출하여 훈련을 수행 -> 과적합 문제 해결
summary는 dropout된 node를 나누지 않음
predict 시에는 dropout 사용 X

Total params: 8,225
Trainable params: 8,225
Non-trainable params: 0
'''


# 3. compile and train
model.compile(loss='mse', optimizer='adam', metrics=['mae'])

earlyStopping = EarlyStopping(monitor='val_loss', mode='min', patience=32,
                              restore_best_weights=True,
                              verbose=1)

modelCheckPoint = ModelCheckpoint(monitor='val_loss', mode='auto', verbose=1,
                                   save_best_only=True,
                                   filepath='MCP/keras39_5_kaggle_bike_MCP.hdf5')

model.fit(x_train, y_train,
          epochs=256,
          batch_size=64,
          validation_split=0.2,
          callbacks=[earlyStopping, modelCheckPoint],
          verbose=1)

model.save(path2+'keras39_5_kaggle_bike_save_model.h5') # 가중치 및 모델 세이브


# 4. evaluate and predict
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)

def RMSE (y_test, y_predict):
    return np.sqrt(mean_squared_error(y_test, y_predict))
print("RMSE: ", RMSE(y_test, y_predict))

r2 = r2_score(y_test, y_predict)
print("R2: ", r2)

# for submission
test_csv = test_csv.reshape(6493, 4, 2, 1)

y_submit = model.predict(test_csv)
submission['count'] = y_submit
submission.to_csv(path+'sampleSubmission_0126.csv')

'''
Result(DNN)
RMSE:  150.45157752219103
R2:  0.30323941332889803

* 이미지가 아닌 데이터는 CNN이 좋은가 DNN이 좋은가
Result(CNN)
RMSE:  151.84623477201092
R2:  0.2902618673099654

'''

1. Conv2D의 input_shape= 4차원이므로 data의 reshape 필요

x_train.shape(7620, 8) -> x_train.reshape(7620, 4, 2, 1)

데이터 수를 의미하는 7260을 제외한 8을 3차원으로 임의 변경 가능

 

2. input_shape보다 Conv2D(kernel_size), MaxPooling(Pool_size)가 커지지 않도록 shape 확인

model.add(Conv2D(128, (2,2), padding='same', activation='relu', input_shape=(4,2,1)))

input_shape=(4,2,1) -> 4*2 크기의 이미지, kernel_size=(3,3) 불가

 

3. traing data와 predict data shape 맞추기

traing data를 기준으로 model이 구성되었으므로 predict data shape도 traing data에 맞추기

 

 

 

소스 코드

🔗 HJ0216/TIL

 

참고 자료

📑 CNN Model Contruction

 

728x90
728x90

이 글은 뉴렉쳐 오라클 데이터베이스 SQL 강의 수강하며 정리한 글입니다.

 

03강 - SQL Develper 설치

 

2023 ver.
1. oracle site 회원가입
2. Developers - Developer Resource Center
3. DownLoad - Developer Tools
4. SQL Developer DownLoad
5. Windows 32-bit/64-bit DownLoad (without JDK)
6. 압출 풀기 후, sqldeveloper 폴더 내 sqldeveloper.exe 실행
7. jdk 경로 선택
→ C:\Program Files\Java\jdk-11.0.17
8. 이전 SQL Developer 설치에서 환경설정을 임포트하시겠습니까? “아니오” 선택

 

 

Oracle practice server 구축

 

 

소스 코드

🔗 HJ0216/TIL/OracleSQL

 
728x90
728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

15강 자주하는 실수 3가지

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

1. Command Not Found

[j@hj0216 ~/dd]$ kbs
-bash: kbs: command not found
[j@hj0216 ~/dd]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/j/.local/bin:/home/j/bin

잘못된 명령어 입력 시 발생

$PATH: command 찾는 경로

/usr/local/bin

/usr/bin

/usr/local/sbin

/usr/sbin

/home/j/.local/bin

/home/j/bin

 

2. 허가 거부

[j@hj0216 ~/dd]$ mkdir /var/d23
mkdir: `/var/d23' 디렉토리를 만들 수 없습니다: 허가 거부

실행하려는 권한이 일반 사용자에게는 없는 경우

특히나 일반 사용자의 경우에는 /home/일반사용자 dir, /tmp dir에 대해서만 write 권한이 존재

[j@hj0216 ~/dd]$ ll /
합계 20
drwxrwxrwt.  11 root root 4096  1월 25 00:26 tmp
# 3자에 대해서도 write 권한 존재

[j@hj0216 ~/dd]$ ll /home
합계 0
drwx------. 4 j j 115  1월 24 23:23 j
# 소유자:j 소유자는 write 권한 존재

 

3. 그런 파일이나 디렉터리가 없습니다

[j@hj0216 ~/dd]$ cd /aa
-bash: cd: /aa: 그런 파일이나 디렉터리가 없습니다

ls 또는 ll(ls-l) 명령어를 통해서 dir 목록 조회

[j@hj0216 ~/dd]$ ls
AA1010  a2  t3

[j@hj0216 ~/dd]$ ls -l
합계 0
-rw-rw-r--. 1 j j 0  1월 25 00:11 AA1010
-rw-rw-r--. 1 j j 0  1월 25 00:28 a2
drwxrwxr-x. 2 j j 6  1월 25 00:11 t3

[j@hj0216 ~/dd]$ ll
합계 0
-rw-rw-r--. 1 j j 0  1월 25 00:11 AA1010
-rw-rw-r--. 1 j j 0  1월 25 00:28 a2
drwxrwxr-x. 2 j j 6  1월 25 00:11 t3

 

728x90