检查目标时出错:预期density_18的形状为(1,),但数组的形状为(10,)

时间:2019-10-15 12:48:39

标签: tensorflow machine-learning neural-network

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<tr class="deleteRow">
    <th scope="row">
        <button type="button" class="btn btn-danger btn-sm">
            <i class="fas fa-trash"></i>
        </button>
    </th>
    <td>Item 1</td>
    <td>
        <input class="form-control" type="number" value="1" />
    </td>
    <td>RM 50.00</td>
</tr>

我必须将MNIST数据分为10类。我将Y_train转换为一个热编码数组。我已经回答了许多答案,但是没有一个帮助。在这方面,请指导我,因为我是ML和神经网络的新手。

1 个答案:

答案 0 :(得分:0)

似乎不需要在第一层中使用model.add(Flatten())。可以使用具有特定输入大小的密集层来代替,例如:model.add(Dense(64, input_shape=your_input_shape, activation="relu")

要确保此问题是由于分层而发生的,可以检查to_categorical()函数是否可与jupyter notebook一起使用。

更新的答案

在创建模型之前,应重塑模型。在这种情况下,28 * 28为784。

train_images = train_images.reshape((-1, 784))
test_images = test_images.reshape((-1, 784))

我还建议通过简单地将图像划分为255来标准化可以完成的数据

完成此步骤后,您应该创建模型。

model = Sequential([
Dense(64, activation='relu', input_shape=(784,)),
Dense(64, activation='relu'),
Dense(10, activation='softmax'),
])

您是否注意到input_shape=(784,)是扁平化输入的形状。

最后一步,编译和拟合。

model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'],
)

model.fit(
train_images,
train_labels,
epochs=10,
batch_size=16,
)

您所做的是,您只是在不向网络馈入输入的情况下将输入层弄平了。这就是为什么您遇到问题。关键是您应该手动调整输入的形状并使用参数Dense()前馈到input_shape