如何在运行时生成的我自己的数据适合我的keras模型

时间:2019-07-05 10:29:32

标签: python keras

我正在尝试建立一个生成对抗网络,但我无法适应生成器模型。我仅在密集层中使用Sequential()模型,首先使用input_shape =(1,),最后使用imgsize [0] * imgsize [1] * 3输出空间。 imgsize =(28,28),所以输出空间有2352个单位。

我需要适应“实际成本”和“先前的图像”,但是当我尝试适应先前的输出时,会出现错误。

ValueError:检查目标时出错:预期GenDense5具有形状(1,)但获得形状为(2352,)的数组

generator = keras.Sequential([
    keras.layers.Dense(1, input_shape=(1,), activation=tf.nn.sigmoid, name="GenDenseIn"),
    keras.layers.Dense(8, activation=tf.nn.softmax, name="GenDense2"),
    keras.layers.Dense(64, activation=tf.nn.relu, name="GenDense3"),
    keras.layers.Dense(256, activation=tf.nn.softmax, name="GenDense4"),
    keras.layers.Dense(imgsize[0] * imgsize[1] * 3, activation=tf.nn.sigmoid, name="GenDense5")
])

generator.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

gen = generator.predict(np.array([1])) # 1 to find the best
img = gen.reshape((1, imgsize[0], imgsize[1], 3))

res = discriminator.predict(img) # Dicriminator evaluate real or fake value
cost = res[0][0] # Real value

model.fit(np.array([cost]), np.array(gen), epochs=100) #ERROR!

1 个答案:

答案 0 :(得分:0)

生成器模型必须输出2352,但是这些数字是一个集体值(图像),但是该模型是使用sparse_categorical_crossentropy损失函数编译的,该函数是用于进行分类的函数,如我的鉴别器。答案是使用mean_squared_error损失函数。

generator.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])