Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何构造自定义图像回归问题的Keras模型?_Python_Tensorflow_Keras_Tensorflow2.0 - Fatal编程技术网

Python 如何构造自定义图像回归问题的Keras模型?

Python 如何构造自定义图像回归问题的Keras模型?,python,tensorflow,keras,tensorflow2.0,Python,Tensorflow,Keras,Tensorflow2.0,我正在尝试使用Tensorflow 2和KerasAPI开发一个回归模型,使用png图像的自定义数据集。然而,我并不完全确定我应该使用哪些层以及如何使用。我把我认为是一个非常简单的模型放在一起作为一个起点,但是当我尝试训练模型时,输出的损失和精度值始终为0。这让我相信我的损失计算不起作用,但我不知道为什么。下面是我的源代码片段,可以找到完整的项目: 上面的代码应该读入一些存储为256 x 128 px png文件的谱图,将它们转换为张量并拟合它们,以便建立回归模型来预测值(在这种情况下,用于生成

我正在尝试使用Tensorflow 2和KerasAPI开发一个回归模型,使用png图像的自定义数据集。然而,我并不完全确定我应该使用哪些层以及如何使用。我把我认为是一个非常简单的模型放在一起作为一个起点,但是当我尝试训练模型时,输出的损失和精度值始终为0。这让我相信我的损失计算不起作用,但我不知道为什么。下面是我的源代码片段,可以找到完整的项目:

上面的代码应该读入一些存储为256 x 128 px png文件的谱图,将它们转换为张量并拟合它们,以便建立回归模型来预测值(在这种情况下,用于生成谱图的音乐的BPM)。图像文件名包含BPM,BPM除以200,生成一个介于0和1之间的值作为标签

如前所述,此代码确实成功运行,但在每个训练步骤后,打印出的损失和精度值始终精确为0.00000,并且不会改变


还值得注意的是,我实际上希望我的模型预测多个值,而不仅仅是一个BPM值,但这是一个单独的问题,因此我已经发布了一个单独的问题。无论如何,我想知道答案。回归模型要求损失函数相关,如“均方误差”、“均方绝对误差”、“均方绝对百分比误差”和“均方对数误差”

def gen_model():
    model = tf.keras.models.Sequential([
      tf.keras.layers.Flatten(input_shape=(256, 128, 3)),
      tf.keras.layers.Dense(512, activation='relu'),
      tf.keras.layers.Dense(512, activation='relu'),        
      tf.keras.layers.Dense(1)
    ])

    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss='mean_squared_error',
                  metrics=['accuracy'])

    return model

对对于回归,您需要另一个损失函数,如
均方误差
。如果你告诉我标签是什么,我想我能给出更好的答案。我想确定你的问题是否需要回归模型。@yaho cho我试图预测一段音乐的节奏,正如我在底部所说的,我实际上试图用几个值来标记每个项目,但在调试过程中试图将其简化为一个值。理想情况下,我想预测一个BPM(每分钟拍数)值,通常在70-180范围内,精确到小数点后2位,以及一个INGISIO值(到第一次拍数的毫秒数,通常是0到1000之间的整数)。我明白了。无论如何,尝试
均方误差
进行回归。但是,我认为准确率可能很低,因为很难从图像中找到任何线性规则。在我自己执行之前我不确定。如果我遇到这个问题,我会尝试使用直方图而不是真实图像。或者,我将尝试使用y标签制作分类模型,y标签按照节奏的范围进行分类。这只是我的假设。请尝试多种方法。@yahocho谢谢你的建议。使用MSE,我确实开始看到损失值在下降!然而,正如您所怀疑的,精度存在问题,我从未看到它从0上升。确切地说,如何处理输入以及使用什么模型层是我在这个项目上的论文的主题。如果您有任何关于改善这一点的想法,我们将不胜感激!非常感谢。我的主要问题是使用了错误的损失度量,现在我使用的是mse,我获得了更多的成功。
def gen_model():
    model = tf.keras.models.Sequential([
      tf.keras.layers.Flatten(input_shape=(256, 128, 3)),
      tf.keras.layers.Dense(512, activation='relu'),
      tf.keras.layers.Dense(512, activation='relu'),        
      tf.keras.layers.Dense(1)
    ])

    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss='mean_squared_error',
                  metrics=['accuracy'])

    return model