рдХрд░рд╕ рдкрд░ DCGAN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рд╢реБрдн рджрд┐рдиред рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдХреБрдЫ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдлрд┐рд░, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреНрдпрд╛ рд╢рд╛рдВрдд рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЦрдмрд░реЗрдВ рджреЗрдЦрдХрд░ рдореИрдВрдиреЗ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЧрд╣рд░реА рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдХреЗрд▓реЗрдВрдХреЛ рдХреА рдХрд┐рддрд╛рдм рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рдЪрд╛рд░ рдереЗ (рдЬреЛ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдирдП рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд░реБрдЪрд┐ рдХреЗ рдереЗ), рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬреЛ рд╢рд╛рдВрдд рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред рдХреЗрд╡рд▓ рдореЗрд░реЗ рд▓рд┐рдП, "рдбреНрд░рд╛рдЗрдВрдЧ рдмрдЪреНрдЪреЗ рдХреЗ рдкрд┐рддрд╛", рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЙрд╕ рдкрде рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдерд╛ред


рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣


рдЬрдм рдореИрдВрдиреЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЕрдзреНрдпрд╛рдп рдкрдврд╝рд╛, рддреЛ рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдЕрдм рдореИрдВ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред
рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХреАрдЖрд░реНрдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдПрдХрджрдо рд╕рд╣реА рдереА , рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреЗрдВрдЯрд┐рдВрдЧ рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЛ рд╢реИрд▓реА рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкрд╛рд░реНрд╕рд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ 4-5 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ 3 рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд░рд╛рд╕реНрддреЗ рдкрд░ рдХрджрдо рдмрдврд╝рд╛рдпрд╛ред рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдкреЗрдЬ рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЯреНрд░реИрдХ рдХрд░реЗрдВ рдХрд┐ "рдЕрдзрд┐рдХ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЪрд┐рддреНрд░ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдореЗрд░реЗ рдЬреИрд╕реЗ рд╣реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рджрд┐рдЦрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд░рд╣реЗрдЧрд╛ред


from scipy.misc import imresize, imsave from matplotlib.image import imread import requests import json from bs4 import BeautifulSoup from itertools import count import os import glob 

рдкрд╣рд▓реЗ рдмреГрд╣рд╕реНрдкрддрд┐ рд╕реЗрд▓ рдореЗрдВ, рдореИрдВрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ред


  • рдЧреНрд▓реЛрдм - рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рдмрд╛рдд
  • рдЕрдиреБрд░реЛрдз, рд╕реБрдВрджрд░рд╕реБрдкрд░ - рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореВрдВрдЫреЗрдВ
  • json - рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рдкрд░ "рдЕрдзрд┐рдХ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ
  • рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ, рд╕рд╣реЗрдЬреЗрдВ, рдЕрдкрдард┐рдд рдХрд░реЗрдВред

 def get_page(style, pagenum): page = requests.get(url1 + style + url2 + str(pagenum) + url3) return page def make_soup(page): soup = BeautifulSoup(page.text, 'html5lib') return soup def make_dir(name, s): path = os.getcwd() + '/' + s + '/' + name os.mkdir(path) 

рдореИрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВред


рдкрд╣рд▓реЗ - рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдорд┐рд▓рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЗрд╕ рдкрд╛рда рдХреЛ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред рдЦреИрд░, рддреАрд╕рд░реА рд╢реИрд▓реА рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдирд╛ рд╣реИред


 styles = ['kubizm'] url1 = 'https://www.wikiart.org/ru/paintings-by-style/' url2 = '?select=featured&json=2&layout=new&page=' url3 = '&resultType=masonry' 

рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╢реИрд▓реА рдХреА рд╕рд░рдгреА рдореЗрдВ, рдХрдИ рд╢реИрд▓рд┐рдпреЛрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдереАрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдорд╛рди рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ред


 for style in styles: make_dir(style, 'images') for style in styles: make_dir(style, 'new256_images') 

рдЖрд╡рд╢реНрдпрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБред рджреВрд╕рд░рд╛ рдЪрдХреНрд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЫрд╡рд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдЧреА, рдПрдХ 256x256 рд╡рд░реНрдЧ рдореЗрдВ рдЪрдкрдЯрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


(рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдХреЛрдИ рд╡рд┐рдХреГрддрд┐рдпрд╛рдБ рди рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдЕрд╕рдВрднрд╡ рдерд╛ рдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдерд╛)


 for style in styles: path = os.getcwd() + '\\images\\' + style + '\\' images = [] names = [] titles = [] for pagenum in count(start=1): page = get_page(style, pagenum) if page.text[0]!='{': break jsons = json.loads(page.text) paintings = jsons['Paintings'] if paintings is None: break for item in paintings: images_temp = [] images_dict = item['images'] if images_dict is None: images_temp.append(item['image']) names.append(item['artistName']) titles.append(item['title']) else: for inner_item in item['images']: images_temp.append(inner_item['image']) names.append(item['artistName']) titles.append(item['title']) images.append(images_temp) for char in ['/','\\','"', '?', ':','*','|','<','>']: titles = [title.replace(char, ' ') for title in titles] for listimg, name, title in zip(images, names, titles): if len(name) > 30: name = name[:25] if len(title) > 50: title = title[:50] if len(listimg) == 1: response = requests.get(listimg[0]) if response.status_code == 200: with open(path + name + ' ' + title + '.png', 'wb') as f: f.write(response.content) else: print('Error from server') else: for i, img in enumerate(listimg): response = requests.get(img) if response.status_code == 200: with open(path + name + ' ' + title + str(i) + '.png', 'wb') as f: f.write(response.content) else: print('Error from server') 

рдпрд╣рд╛рдВ рдЫрд╡рд┐рдпрд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╣рд╛рдВ рдЪрд┐рддреНрд░ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддреЗ, рдореВрд▓ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред


рдкрд╣рд▓реЗ рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ:


рдореИрдВрдиреЗ рдмреЗрд╡рдХреВрдлреА рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдкреВрдЫрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ json (рд╢рдмреНрджрдХреЛрд╖ рд╡рд╣ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ "рдЕрдзрд┐рдХ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИред рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ), рдФрд░ рд░реБрдХреЗрдВ рдЬрдм рд╕рд░реНрд╡рд░ рдХреБрдЫ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рдП рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреА рддрд░рд╣ рди рд▓реМрдЯреЗред ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реМрдЯреЗ рдкрд╛рда рдХрд╛ рдкрд╣рд▓рд╛ рдЪрд░рд┐рддреНрд░ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реИрдХреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рд╢рд░реАрд░ рдЖрддрд╛ рд╣реИред


рдпрд╣ рднреА рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЪрд┐рддреНрд░ рдПрд▓реНрдмрдо рдХреА рддрд░рд╣ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдПрдХрд▓ рдкреЗрдВрдЯрд┐рдВрдЧ рд▓реМрдЯ рд░рд╣реА рд╣реИрдВ, рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдирд╛рдо рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдПрдХ рдмрд╛рд░ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреА рдЧрдИ рд╣реИред


  for style in styles: directory = os.getcwd() + '\\images\\' + style + '\\' new_dir = os.getcwd() + '\\new256_images\\' + style + '\\' filepaths = [] for dir_, _, files in os.walk(directory): for fileName in files: #relDir = os.path.relpath(dir_, directory) #relFile = os.path.join(relDir, fileName) relFile = fileName #print(directory) #print(relFile) filepaths.append(relFile) #print(filepaths[-1]) print(filepaths[0]) for i, fp in enumerate(filepaths): img = imread(directory + fp, 0) #/ 255.0 img = imresize(img, (256, 256)) imsave(new_dir + str(i) + ".png", img) 

рдпрд╣рд╛рдБ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред


рдЦреИрд░, рдбреЗрдЯрд╛рд╕реЗрдЯ рдЗрдХрдЯреНрдареЗ рд╣реИрдВ, рдЖрдк рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ!


рдЫреЛрдЯреА рд╢реБрд░реБрдЖрдд



рдЖрдЧреЗ, рдореВрд▓ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдореИрдВрдиреЗ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛! рд▓реЗрдХрд┐рди рдЬрдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рддреЛ рдореЗрд░реА рдирд┐рд░рд╛рд╢рд╛ рдХреНрдпрд╛ рдереАред рдЗрди рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреА рд╕рдорд╛рди рд╢реИрд▓реА рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░ рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рд░рд╣реВрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдЯрд┐рдкрд┐рдВрдЧ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреА рд╢реБрд░реВ рд╣реБрдИрдВред


 def build_generator(): model = Sequential() model.add(Dense(128 * 7 * 7, input_dim = latent_dim)) model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Reshape((7, 7, 128))) model.add(Conv2DTranspose(64, filter_size, strides=(2,2), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(32, filter_size, strides=(1, 1), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(img_channels, filter_size, strides=(2,2), padding='same')) model.add(Activation("tanh")) model.summary() return model 

  • latent_dim - 100 рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреАред


     def build_discriminator(): model = Sequential() model.add(Conv2D(64, kernel_size=filter_size, strides = (2,2), input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(128, kernel_size=filter_size, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(128, kernel_size=filter_size, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(1)) model.add(Activation('sigmoid')) model.summary() return model 

    рдпрд╣реА рд╣реИ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореВрд▓ рдкрд░рддреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рдФрд░ рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрдо рддреМрд░ рдкрд░ рдореВрд▓ рд▓реЗрдЦ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реЛрддреА рд╣реИред 28x28 рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдВрджрд░реВрдиреА рдирд╣реАрдВ!



рдЦреИрд░, рдмрд╣реБрдд рдЪрд╛рд▓ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ - рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рднреЗрджрднрд╛рд╡рдХрд░реНрддрд╛ рдиреЗ рдЙрддреНрдкрдиреНрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрд╛, рдФрд░ рд╡рд┐рд╖рдо рдЪрд▓рдирд╛ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЛрдЧреЛрдВ рдкрд░ред


рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреЗ DCGAN рдиреЗ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рд╕реАрдЦрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдмрдЯреЙрдкрд┐рдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд┐рддреНрд░ 19 рд╡реЗрдВ рдпреБрдЧ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛,



рдпреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдИ рдмрд╛рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡реЗ рд╢рд┐рдХреНрд╖рд╛ рдХреЗ 99 рд╡реЗрдВ рдпреБрдЧ рдореЗрдВ рдмрджрд▓ рдЧрдПред


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ, рдореИрдВрдиреЗ рд╕реАрдЦрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ рд╕реЛрдЪрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред


рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреВрд▓ рдиреЗрдЯрд╡рд░реНрдХ


рдЕрдЧрд▓рд╛ рдЪрд░рдг рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде GAN рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛: рд╡рд░реНрддрдорд╛рди рдЪрд┐рддреНрд░ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рд╡рд┐рд╡реЗрдЪрдХ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд▓реЗрдмрд▓ рд╡рд╛рд▓реЗ рдЧрдг рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреИрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ - рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдмрдЯреЙрдкрд┐рдХ рдХреЗ рдирд╛рдо рдкрд░ рд╣реИред


рдХреИрди рдореЗрдВ, рд╡рд┐рд╡реЗрдЪрдХ рдЪрд┐рддреНрд░ рдХреЗ рд╡рд░реНрдЧ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЪрд┐рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗрдЯ рд╕реЗ рд╣реИред рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдЕрд╕рд▓реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рднреЗрджрднрд╛рд╡рдХрд░реНрддрд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдЧ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рджреА рдЬрд╛рддреА рд╣реИред


рдПрдХ рдЙрддреНрдкрдиреНрди рдЪрд┐рддреНрд░ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрддреЗ рд╕рдордп, рд╡рд┐рд╡реЗрдЪрдХ рдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдпрд╣ рдЪрд┐рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред


рдЬрдирд░реЗрдЯрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╕ рднреЗрджрднрд╛рд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд┐рддреНрд░ рдХреА рдХрдХреНрд╖рд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╕рдордп, рднреЗрджрднрд╛рд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдиреБрдХрд╕рд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЬрдирд░реЗрдЯрд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦреЗрдЧрд╛ рдХрд┐ рднреЗрджрднрд╛рд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ 1, рдкреВрд░реНрдг рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред


рдХреИрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд▓реЛрдХрддрд╛рдВрддреНрд░рд┐рдХрддрд╛ рдХрд┐ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реАрдЦрддрд╛ рдирд╣реАрдВ рд╣реИред рдХрдИ рдЕрдкреНрд░рд┐рдп рдЕрд╕рдлрд▓рддрд╛рдУрдВ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рд╣рд╛рдБ, рдореИрдВрдиреЗ рдРрд╕рд╛ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛), рд╡реЗрдЯ рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдРрд╕рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓реЗрдмрд▓ рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП (рдЗрд╕ рдЖрдХрд╛рд░ рдХреЗ рд╕рднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░) рдПрдХ рдПрдХрд▓ 256x256 рдЪрд┐рддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗред рдпрд╣рд╛рдБ рдирд┐рд░реНрдгрд╛рдпрдХ рдореЛрдбрд╝ рдпрд╣ рдерд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ, рд╡рд┐рд╡реЗрдЪрдХ рдХреЛ рдЙрддреНрдкрдиреНрди рдЪрд┐рддреНрд░реЛрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЛрдЧреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдПред



рдпрд╣ рдирддреАрдЬрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд░реБрдХ рдЧрдпрд╛ рдФрд░ рдЕрдЧрд▓реЗ рдХрджрдо рдкрд░ рдЖрдЧреЗ рдмрдврд╝рд╛ред рд╣рд╛рдВ, рд░рдВрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд╕реНрд╡реАрд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рдерд╛ред рд╡рд╣ рдЗрд╕ рдХреЗ рд╕рд╛рде рдореБрдХрд╛рдмрд▓рд╛ рдХрд┐рдпрд╛ред


рддрдм рд╣рдо рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдХрд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ред рдХреЛрдб рдХреЛ рддреБрд░рдВрдд рдкреЗрд╢ рдХрд░реЗрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 import glob from PIL import Image from keras.preprocessing.image import array_to_img, img_to_array, load_img from datetime import date from datetime import datetime import tensorflow as tf import numpy as np import argparse import math import os from matplotlib.image import imread from scipy.misc.pilutil import imresize, imsave import matplotlib.pyplot as plt import cv2 import keras from keras.models import Sequential, Model from keras.layers import Dense, Activation, Reshape, Flatten, Dropout, Input from keras.layers.convolutional import Conv2D, Conv2DTranspose, MaxPooling2D from keras.layers.normalization import BatchNormalization from keras.layers.advanced_activations import LeakyReLU from keras.optimizers import Adam, SGD from keras.datasets import mnist from keras import initializers import numpy as np import random 

рдЬреЗрдирд░реЗрдЯрд░ рдмрдирд╛рдирд╛ред


рдкрд░рддреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдлрд┐рд░ рд╕реЗ рд▓реЗрдЦ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ (рд╢рд░реНрддреЗрдВ: gtx970 рдХреЗ рд╕рд╛рде рдПрдХ рдШрд░ рдХрд╛ рдХрдВрдкреНрдпреВрдЯрд░), рдФрд░ рдХрд╣реАрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг


 def build_generator(): model = Sequential() model.add(Dense(128 * 16 * 8, input_dim = latent_dim)) model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Reshape((8, 8, 256))) model.add(Conv2DTranspose(512, filter_size_g, strides=(1,1), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(512, filter_size_g, strides=(1,1), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(256, filter_size_g, strides=(1,1), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(128, filter_size_g, strides=(2,2), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(64, filter_size_g, strides=(2,2), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(32, filter_size_g, strides=(2,2), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(16, filter_size_g, strides=(2,2), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(8, filter_size_g, strides=(2,2), padding='same')) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU()) model.add(Conv2DTranspose(img_channels, filter_size_g, strides=(1,1), padding='same')) model.add(Activation("tanh")) model.summary() return model 

рд╡рд┐рд╡реЗрдЪрдХ рдирд┐рд░реНрдорд╛рдг рдлрд╝рдВрдХреНрд╢рди рджреЛ рдореЙрдбрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд┐рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЪрд┐рддреНрд░ рдХреЗ рд╡рд░реНрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред


 def build_discriminator(num_classes): model = Sequential() model.add(Conv2D(64, kernel_size=filter_size_d, strides = (2,2), input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(128, kernel_size=filter_size_d, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(256, kernel_size=filter_size_d, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(512, kernel_size=filter_size_d, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(512, kernel_size=filter_size_d, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(512, kernel_size=filter_size_d, strides = (2,2), padding="same")) model.add(BatchNormalization(momentum=0.8)) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Flatten()) model.summary() img = Input(shape=img_shape) features = model(img) validity = Dense(1)(features) valid = Activation('sigmoid')(validity) label1 = Dense(1024)(features) lrelu1 = LeakyReLU(alpha=0.2)(label1) label2 = Dense(512)(label1) lrelu2 = LeakyReLU(alpha=0.2)(label2) label3 = Dense(num_classes)(label2) label = Activation('softmax')(label3) return Model(img, valid), Model(img, label) 

рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред рдПрдХ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдореЙрдбрд▓ рдореЗрдВ, рд╡рд┐рд╡реЗрдЪрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


 def generator_containing_discriminator(g, d, d_label): noise = Input(shape=(latent_dim,)) img = g(noise) d.trainable = False d_label.trainable = False valid, target_label = d(img), d_label(img) return Model(noise, [valid, target_label]) 

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рддреНрд░реЛрдВ рдФрд░ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдмреИрдЪ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред рдбреЗрдЯрд╛ - рдкрддреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЪрд┐рддреНрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИред


 def get_images_classes(batch_size, data): X_train = np.zeros((batch_size, img_rows, img_cols, img_channels)) y_labels = np.zeros(batch_size) choice_arr = np.random.randint(0, len(data), batch_size) for i in range(batch_size): rand_number = np.random.randint(0, len(data[choice_arr[i]])) temp_img = cv2.imread(data[choice_arr[i]][rand_number]) X_train[i] = temp_img y_labels[i] = choice_arr[i] X_train = (X_train - 127.5)/127.5 return X_train, y_labels 

рдЫрд╡рд┐ рдмреИрдЪ рдХреЗ рд╕реБрдВрджрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдиред рджрд░рдЕрд╕рд▓, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЗ рд╕рднреА рдЪрд┐рддреНрд░ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдереЗред


 def combine_images(generated_images): num = generated_images.shape[0] width = int(math.sqrt(num)) height = int(math.ceil(float(num)/width)) shape = generated_images.shape[1:3] image = np.zeros((height*shape[0], width*shape[1], img_channels), dtype=generated_images.dtype) for index, img in enumerate(generated_images): i = int(index/width) j = index % width image[i*shape[0]:(i+1)*shape[0], j*shape[1]:(j+1)*shape[1]] = \ img[:, :, :,] return image 

рдФрд░ рдпрд╣рд╛рдБ рднреА рдпрд╣реА рдбреЗрдЯрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдЫрд╡рд┐ рдкрддреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдКрдкрд░, рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ


 def get_data(): styles_folder = os.listdir(path=os.getcwd() + "\\new256_images\\") num_styles = len(styles_folder) data = [] for i in range(num_styles): data.append(glob.glob(os.getcwd() + '\\new256_images\\' + styles_folder[i] + '\\*')) return data, num_styles 

рдпреБрдЧ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреА рдЪрд┐рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ред рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрд░рд╛рдЬреВ рд▓реЛрдб рдХрд░рдирд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ 5 рдпреБрдЧ, рд╡рдЬрди рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИрдВред


рдпрд╣ рднреА рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрдирдкреБрдЯ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рд╢реЛрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕реНрдореВрджрдб рдХреНрд▓рд╛рд╕ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рд╕реАрдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░рддреЗ рд╣реИрдВред


 def train_another(epochs = 100, BATCH_SIZE = 4, weights = False, month_day = '', epoch = ''): data, num_styles = get_data() generator = build_generator() discriminator, d_label = build_discriminator(num_styles) discriminator.compile(loss=losses[0], optimizer=d_optim) d_label.compile(loss=losses[1], optimizer=d_optim) generator.compile(loss='binary_crossentropy', optimizer=g_optim) if month_day != '': generator.load_weights(os.getcwd() + '/' + month_day + epoch + ' gen_weights.h5') discriminator.load_weights(os.getcwd() + '/' + month_day + epoch + ' dis_weights.h5') d_label.load_weights(os.getcwd() + '/' + month_day + epoch + ' dis_label_weights.h5') dcgan = generator_containing_discriminator(generator, discriminator, d_label) dcgan.compile(loss=losses[0], optimizer=g_optim) discriminator.trainable = True d_label.trainable = True for epoch in range(epochs): for index in range(int(15000/BATCH_SIZE)): noise = np.random.normal(0, 1, (BATCH_SIZE, latent_dim)) real_images, real_labels = get_images_classes(BATCH_SIZE, data) #real_images += np.random.normal(size = img_shape, scale= 0.1) generated_images = generator.predict(noise) X = real_images real_labels = real_labels - 0.1 + np.random.rand(BATCH_SIZE)*0.2 y_classif = keras.utils.to_categorical(np.zeros(BATCH_SIZE) + real_labels, num_styles) y = 0.8 + np.random.rand(BATCH_SIZE)*0.2 d_loss = [] d_loss.append(discriminator.train_on_batch(X, y)) discriminator.trainable = False d_loss.append(d_label.train_on_batch(X, y_classif)) print("epoch %d batch %d d_loss : %f, label_loss: %f" % (epoch, index, d_loss[0], d_loss[1])) X = generated_images y = np.random.rand(BATCH_SIZE) * 0.2 d_loss = discriminator.train_on_batch(X, y) print("epoch %d batch %d d_loss : %f" % (epoch, index, d_loss)) noise = np.random.normal(0, 1, (BATCH_SIZE, latent_dim)) discriminator.trainable = False d_label.trainable = False y_classif = keras.utils.to_categorical(np.zeros(BATCH_SIZE) + 1/num_styles, num_styles) y = np.random.rand(BATCH_SIZE) * 0.3 g_loss = dcgan.train_on_batch(noise, [y, y_classif]) d_label.trainable = True discriminator.trainable = True print("epoch %d batch %d g_loss : %f, label_loss: %f" % (epoch, index, g_loss[0], g_loss[1])) if index % 50 == 0: image = combine_images(generated_images) image = image*127.5+127.5 cv2.imwrite( os.getcwd() + '\\generated\\epoch%d_%d.png' % (epoch, index), image) image = combine_images(real_images) image = image*127.5+127.5 cv2.imwrite( os.getcwd() + '\\generated\\epoch%d_%d_data.png' % (epoch, index), image) if epoch % 5 == 0: date_today = date.today() month, day = date_today.month, date_today.day #      json d_json = discriminator.to_json() #     json_file = open(os.getcwd() + "/%d.%d dis_model.json" % (day, month), "w") json_file.write(d_json) json_file.close() #      json d_l_json = d_label.to_json() #     json_file = open(os.getcwd() + "/%d.%d dis_label_model.json" % (day, month), "w") json_file.write(d_l_json) json_file.close() #      json gen_json = generator.to_json() #     json_file = open(os.getcwd() + "/%d.%d gen_model.json" % (day, month), "w") json_file.write(gen_json) json_file.close() discriminator.save_weights(os.getcwd() + '/%d.%d %d_epoch dis_weights.h5' % (day, month, epoch)) d_label.save_weights(os.getcwd() + '/%d.%d %d_epoch dis_label_weights.h5' % (day, month, epoch)) generator.save_weights(os.getcwd() + '/%d.%d %d_epoch gen_weights.h5' % (day, month, epoch)) 

рд╢реБрд░реБрдЖрддреА рдЪрд░ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдХрдо "рд╢рдХреНрддрд┐" рдХреЗ рдХрд╛рд░рдг, рдЕрдзрд┐рдХрддрдо 16 рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдВрднрд╡ рд╣реИред


 img_rows = 256 img_cols = 256 img_channels = 3 img_shape = (img_rows, img_cols, img_channels) latent_dim = 100 filter_size_g = (5,5) filter_size_d = (5,5) d_strides = (2,2) color_mode = 'rgb' losses = ['binary_crossentropy', 'categorical_crossentropy'] g_optim = Adam(0.0002, beta_2 = 0.5) d_optim = Adam(0.0002, beta_2 = 0.5) train_another(1000, 16) 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдмреНрд░ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдиреНрдпреВрд░реЙрди рддреАрди рджрд┐рдиреЛрдВ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрдм 113 рд╡реЗрдВ рдпреБрдЧ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рддрд╕реНрд╡реАрд░реЗрдВ рдорд┐рд▓реАрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдордп рдерд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреВрдВрдЧрд╛!



рдпреЗ рд╡реЛ рддрд╕реНрд╡реАрд░реЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдЬ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИрдВред рд╢рд╛рдпрдж рдЙрдирдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рдХреЗ, рдореИрдВ рдкрд╛рдардХ рдХреЛ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдзрд╛рд░рдгрд╛ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛ рд╕рдХрддрд╛ рд╣реВрдБред рдпрд╣ рдХрд╛рдлреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕реНрдХреНрд░рд╛рдЗрдм рдХрд░рдХреЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдЬ рдореБрдЭреЗ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдЖрдпрд╛ред


рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИред рдпрд╣ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рдордЭрджрд╛рд░ рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ рдмрдбрд╝рд╛ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред


рдореБрдЭреЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛, рдЕрдЪреНрдЫреА рд╕рд▓рд╛рд╣ рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/hi431614/


All Articles