import numpy as np
import tensorflow as tf
def solution_model():
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([5.0, 6.0, 7.0, 8.0, 9.0, 10.0], dtype=float)
# YOUR CODE HERE
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(1, input_shape=[1]),
])
model.compile(optimizer="sgd", loss="mse")
model.fit(xs, ys, epochs=500, verbose=0)
return model
# Note that you'll need to save your model as a .h5 like this
# This .h5 will be uploaded to the testing infrastructure
# and a score will be returned to you
if __name__ == '__main__':
model = solution_model()
model.save("mymodel.h5")
print(model.predict([10.0]))
def sigmoid(z):
return 1/(1+np.exp(-z))
plt.figure(figsize=(10, 7))
x = np.arange(-10, 10)
y = sigmoid(x)
plt.plot(x, y)
plt.show()
방법2)
Dense(2, activation = 'softmax')
loss = 'categorical_crossentropy' (y값이 onehot 인코딩 되어있을 때)
또는
loss = 'sparse_categorical_crossentropy' (y값이 onehot 인코딩 안되어 있을 때)
각각의 뉴런이 될 확률을 구해서 가장 큰 값을 가진 뉴런으로 분류
A가 될 확률 : 0.7
B가 될 확률 : 0.2
C가 될 확률 : 0.1
--> A로 분류
import numpy as np
a = np.random.uniform(low=0.0, high=10.0, size=3)
def softmax(a) :
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
y = softmax(a)
print('Class 별 확률 값 출력')
print('===' * 10)
for i in range(3):
print('Class {} 의 확률: {:.3f}'.format(i, y[i]))
print('===' * 10)
print('Class 별 확률 값의 합: {:.1f}'.format(y.sum()))
Flatten이란?
고차원을 1D로 변환하여Dense Layer에 전달해 주기 위하여 사용합니다.
28 X 28 의2D로 되어 있는 이미지를 784로1D로 펼쳐 주는 작업입니다.
이미지는 2차원 데이터(2D)
2D데이터는 Dense Layer에 못들어간다.
2차원 데이터를 1차원으로 변환해주어야 함
5. Model 만들기
model 정의 할 때 input_shape 잡는 법
input 으로 들어가는 x_train의 shape를 확인하면 된다. 해당 결과를 그대로 사용하면 된다 (28,28)
from bs4 import BeautifulSoup
from selenium import webdriver
import requests
import urllib.request
import time
import os
import urllib
from PIL import Image
import cv2
3. 자동차의 이미지를 크롤링 할 예정이므로 cars라는 딕셔너리에 '검색어':'저장할폴더이름' 형식으로 key값과 value값을 정한다.
link라는 빈 리스트를 만든다. 이 리스트는 나중에 img 소스의 링크를 저장할 리스트이다.
cars = {'셀토스':'seltos2'}
link = []
4. 먼저 셀레니움으로 웹드라이버를 불러온다.
크롬 웹드라이버를 사용했는데, 크롬웹드라이버를 본인의 크롬 버전에 맞게 exe 파일을 다운받아서 exe 드라이버가 다운받아져 있는 디렉토리 경로를 입력하면 된다.
처음으로 띄울 웹페이지의 url을 입력한다.
for key in cars:
driver = webdriver.Chrome('D:\chromedriver_win32\chromedriver.exe')
driver.get('https://naver.com')
5. 네이버 창의 우클릭을 하여 "검사" 를 클릭한다.
6. '검사' 클릭시 나오는 우측 창 상단에 '화살표'모양을 누르고 검색창에 가져다 대면 해당 검색창 소스의 이름을 알 수 있다. name = 'query' 라고 적혀있다. 이 이름을 알아 내야 한다.
7. 알아낸 이름을 driver.find_element_by_name() 안에 작성한다.
이 함수는 말 그대로 요소의 이름으로 찾기 라는 것이다. 검색창이 소스상에서 이름이 query이므로 검색창에 .send_keys라는 매소드로 초기에 설정한 cars의 key 값인 '셀토스'를 입력한다.
입력 후 검색 버튼을 눌러야하는데, 이를 실행하는 방법은 다음과 같다.
검색버튼을 동일하게 화살표 모양으로 눌러서 html 소스를 찾는다.
해당 소스위에서 우클릭을 한 후 'copy' -> 'Copy XPath'를 한 후 driver.find_element_by_xpath() 안에 붙여넣기를 한다.
이는 해당 요소를 xpath로 찾는 다는 뜻이다. 이후 .click이라는 메소드를 하용하여 검색버튼을 클릭하는 행위까지 추가한다.
10. 최초 이미지는 위의 코드에서 저장을 했고, 그 이후에 더 많은 이미지를 진행하고 싶다면 for문으로 한장씩 옆으로 넘기면서 img 소스를 link라는 리스트에 저장을 하면 된다.
for i in range(19):
driver.find_element_by_xpath('//*[@id="container"]/div[5]/div/a[2]/div').click()
time.sleep(1)
img = driver.find_element_by_xpath('//*[@id="container"]/div[5]/div/div/ul/li[2]/img')
img.get_attribute('src')
link.append(img.get_attribute('src'))
11. 드라이버를 닫고, os 모듈을 통해 폴더를 생성한다. 초기에 지정한 cars[key] 의 value값으로 폴더를 만든다.
count 값은 폴더 안에서 이름을 지정할 때 중복이 되지 않게 하기위해 count를 하나씩 증하했다.
area = (0,0,980,570) 으로 지정하여 image를 원하는 크기로 자른 후 저장한다.
driver.close()
count = 0
os.makedirs(os.path.join('D:/blog/'+cars[key]))
for url in link:
count += 1
urllib.request.urlretrieve(url, 'D:/blog/'+cars[key]+'/asigd'+str(count)+'iwjed.jpg')
image = Image.open('D:/blog/'+cars[key]+'/asigd'+str(count)+'iwjed.jpg')
area = (0,0,980,570)
crop_image = image.crop(area)
crop_image.save('D:/blog/'+cars[key]+'/asigd'+str(count)+'iwjed.jpg')
12. 저장한 이미지를 2개씩 붙이고 border(테두리)를 만들어주는 코드이다.
for i in range(1,22, 2):
img1 = cv2.imread('D:/blog/'+cars[key]+'/asigd'+str(i)+'iwjed.jpg')
img2 = cv2.imread('D:/blog/'+cars[key]+'/asigd'+str(1+i)+'iwjed.jpg')
addv = cv2.vconcat([img1, img2])
bordersize = 2
border = cv2.copyMakeBorder(addv, top=bordersize, bottom=bordersize, left=bordersize, right=bordersize, borderType=cv2.BORDER_CONSTANT, value=[0,0,0])
cv2.imwrite('D:/blog/'+cars[key]+'/asigd'+str(i*123)+'iwjed.jpg', border)
전체 코드 참조
cars = {'셀토스':'seltos2'}
link = []
for key in cars:
driver = webdriver.Chrome('D:\chromedriver_win32\chromedriver.exe')
driver.get('https://naver.com')
driver.find_element_by_name('query').send_keys(key)
driver.find_element_by_xpath('//*[@id="search_btn"]').click()
driver.find_element_by_xpath('//*[@id="main_pack"]/div[2]/div/div[2]/div/div[1]/dl/dt[1]/a').click()
# driver.find_element_by_xpath('//*[@id="main_pack"]/div[3]/div/div[2]/div/div[1]/dl/dt[1]/a').click()
# driver.find_element_by_xpath('//*[@id="main_pack"]/div[2]/div/div[2]/div/div[1]/dl/dt[1]/a').click()
driver.switch_to.window(driver.window_handles[1])
driver.find_element_by_xpath('//*[@id="content"]/div[1]/ul/li[3]/a').click()
time.sleep(1)
img = driver.find_element_by_xpath('//*[@id="container"]/div[5]/div/div/ul/li[2]/img')
img.get_attribute('src')
link.append(img.get_attribute('src'))
for i in range(19):
driver.find_element_by_xpath('//*[@id="container"]/div[5]/div/a[2]/div').click()
time.sleep(1)
img = driver.find_element_by_xpath('//*[@id="container"]/div[5]/div/div/ul/li[2]/img')
img.get_attribute('src')
link.append(img.get_attribute('src'))
# driver.find_element_by_xpath('//*[@id="container"]/div[5]/div/a[2]/div').click()
driver.close()
count = 0
os.makedirs(os.path.join('D:/blog/'+cars[key]))
for url in link:
count += 1
urllib.request.urlretrieve(url, 'D:/blog/'+cars[key]+'/asigd'+str(count)+'iwjed.jpg')
image = Image.open('D:/blog/'+cars[key]+'/asigd'+str(count)+'iwjed.jpg')
area = (0,0,980,570)
crop_image = image.crop(area)
crop_image.save('D:/blog/'+cars[key]+'/asigd'+str(count)+'iwjed.jpg')
for i in range(1,22, 2):
img1 = cv2.imread('D:/blog/'+cars[key]+'/asigd'+str(i)+'iwjed.jpg')
img2 = cv2.imread('D:/blog/'+cars[key]+'/asigd'+str(1+i)+'iwjed.jpg')
addv = cv2.vconcat([img1, img2])
bordersize = 2
border = cv2.copyMakeBorder(addv, top=bordersize, bottom=bordersize, left=bordersize, right=bordersize, borderType=cv2.BORDER_CONSTANT, value=[0,0,0])
cv2.imwrite('D:/blog/'+cars[key]+'/asigd'+str(i*123)+'iwjed.jpg', border)