【问题标题】:How can I fit my keras model with my own data generated at runtime如何使用我自己在运行时生成的数据来拟合我的 keras 模型
【发布时间】:2019-11-15 23:38:55
【问题描述】:

我正在尝试创建一个生成对抗网络,但我无法拟合生成器模型。我使用只有 Dense 层的 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!

【问题讨论】:

  • 您可以尝试创建一个变量来保存 imgsize[0] * imgsize[1] * 3 值,然后将该变量放入最终的密集层吗?
  • 没用,但是谢谢。

标签: python keras


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多