繁体   English   中英

CNN 模型无法训练

[英]CNN Model unable to train

我正在尝试训练一个 CNN 模型来预测格式

array([ 0., 0., 0., 0., -1.], dtype=float32)

我的训练数据如下所示:

0        [[-1.0, -1.0, -1.0, -1.0, -1.0], [0.0, 0.0, 0....
1        [[0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 1.0, 0....
2        [[0.0, 0.0, 0.0, -1.0, -1.0], [0.0, 0.0, 0.0, ...
3        [[-1.0, -1.0, -1.0, -1.0, -1.0], [-1.0, -1.0, ...
4        [[-1.0, -1.0, -1.0, -1.0, -1.0], [0.0, 0.0, 0....
                               ...                        
15484    [[-1.0, -1.0, -1.0, -1.0, -1.0], [0.0, 2.0, 1....
15485    [[-1.0, -1.0, -1.0, -1.0, -1.0], [-1.0, -1.0, ...
15486    [[-1.0, -1.0, -1.0, -1.0, -1.0], [0.0, 2.0, 0....
15487    [[1.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0....
15488    [[-1.0, -1.0, -1.0, -1.0, -1.0], [-1.0, -1.0, ...

每行形状 (24,5) 看起来像这样:

array([[-1., -1., -1., -1., -1.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  3.,  0.,  0.,  1.],
       [ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0., -1.],
       [ 0.,  1.,  2.,  0.,  0.],
       [ 0.,  3.,  0.,  0., -1.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 1.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0., -1.],
       [ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 0.,  0.,  0.,  0., -1.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 0.,  0.,  0.,  0., -1.],
       [ 0.,  1.,  0.,  0., -1.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0., -1.],
       [ 1.,  2.,  0.,  0., -1.]], dtype=float32)

我使用的模型如下所示:

model = tf.keras.Sequential(layers=[
                tf.keras.layers.Conv2D(32,kernel_size = 3, activation=tf.nn.relu, input_shape=(28,28,1)),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.Conv2D(32,kernel_size = 3, activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.Conv2D(32,kernel_size = 5,strides=2,padding='same', activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),

                tf.keras.layers.Conv2D(64,kernel_size = 3, activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.Conv2D(64,kernel_size = 3, activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.Conv2D(64,kernel_size = 3, strides=2, padding='same', activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.Flatten(),
                tf.keras.layers.Dense(128,activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.Dense(1, activation=tf.nn.softmax)])

        model.compile(optimizer=tf.keras.optimizers.Adam(0.1), 
                      loss=tf.keras.losses.CategoricalCrossentropy(), 
                      metrics=tf.keras.metrics.Accuracy())

我是该领域的新手,目前遇到以下错误:

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).

有人可以告诉我我在这里做错了什么吗? 我在训练数据上添加了一个tf.convert_to_tensor()函数,但仍然出现相同的错误。

添加.astype("float32")似乎也不起作用。

tf.convert_to_tensor()函数实际上应该已经完成​​了。 这样转换的玩具示例数组a_tensor = tf.convert_to_tensor(a, dtype=tf.int32)将是 CNN 的有效输入, n这样的数组的数组也是如此(然后shape=(n, 24, 5) )。 您可以发布代码的最小工作示例,这样我们就可以检查语法......现在很难判断出了什么问题。

除了这两个小观察:您在 CNN 中的输入形状尚未显示适合您的数据的正确形状。 最后一个密集的 softmax 层也不是您提出的预测格式的样子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM