def builder( img_size: types_of_gan.input_img_size = 28, channels: int = 1, kernel_size: Union[int, Tuple[int, int]] = 3, ) -> keras.engine.training.Model: """ Ganのdiscriminator部を作成する。model1のパラメータ違い :param img_size : 画像のピクセル比 整数なら指定したサイズの正方形、タプルなら(raw, cal) :param channels:色の出力変数(白黒画像なら1) :param kernel_size: 2次元の畳み込みウィンドウの幅と高さ 整数なら縦横比同じに :return: discriminator部のモデル """ raw, col = types_of_gan.get_size_pair(img_size) img_shape = (raw, col, channels) model = Sequential() model.add( Conv2D(raw, kernel_size=kernel_size, strides=2, input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.5)) model.add( Conv2D(raw * 2, kernel_size=kernel_size, strides=2, padding="same")) model.add(ZeroPadding2D(padding=((0, 1), (0, 1)))) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.5)) model.add(BatchNormalization(momentum=0.8)) model.add( Conv2D(raw * 4, kernel_size=kernel_size, strides=2, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add( Conv2D(raw * 8, kernel_size=kernel_size, strides=1, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(1, activation='tanh')) model.summary() img = Input(shape=img_shape) validity = model(img) return Model(img, validity)
def builder( img_size: types_of_gan.input_img_size = 28, channels: int = 3, mid_neuro_num: int = 128, z_dim: int = 100, momentum: float = 0.8, kernel_size: Union[int, Tuple[int, int]] = 3) -> keras.engine.training.Model: """ Ganのgenerator部を作成する。model2の活性化関数をLeakyReLUに変更 :param img_size : 画像のピクセル比 整数なら指定したサイズの正方形、タプルなら(raw, col) :param channels:色の出力変数(白黒画像なら1) :param mid_neuro_num: 中間層のニューロの数のベース :param z_dim:潜在変数:(generatorの入力) :param momentum:Batchの移動平均のためのMomentum :param kernel_size: 2次元の畳み込みウィンドウの幅と高さ 整数なら縦横比同じに :return: generator部のモデル """ raw, col = types_of_gan.get_size_pair(img_size) noise_shape = (z_dim, ) model = Sequential() model.add( Dense(mid_neuro_num * raw * col, activation="relu", input_shape=noise_shape)) model.add(Reshape((raw, col, mid_neuro_num))) model.add(BatchNormalization(momentum=momentum)) model.add(UpSampling2D()) model.add(Conv2D(mid_neuro_num, kernel_size=kernel_size, padding="same")) model.add(LeakyReLU(alpha=0.1)) model.add(BatchNormalization(momentum=momentum)) model.add(UpSampling2D()) model.add( Conv2D(int(mid_neuro_num / 2), kernel_size=kernel_size, padding="same")) model.add(LeakyReLU(alpha=0.1)) model.add(BatchNormalization(momentum=momentum)) model.add(Conv2D(channels, kernel_size=kernel_size, padding="same")) model.add(LeakyReLU(alpha=0.1)) model.summary() noise = Input(shape=noise_shape) img = model(noise) return Model(noise, img)