首页 > 解决方案 > CNN-Bug Generell 问题

问题描述

我目前正在使用 Cifar-10 数据集开发一个小型 CNN。我只是在这里和那里更新了我的代码,现在它不起作用。我无法弄清楚错误。预测告诉我“不是数字”。找不到我的问题的答案。所以我不能在不添加更多文字的情况下发布问题。Idk 我应该在这里写什么。一个好的早餐现在会很好。咖啡和煎饼之类的。我希望我现在可以发布问题。

from keras.datasets import cifar10
import numpy as np

(x_training, y_training), (x_test,y_test) = cifar10.load_data()

x_training = x_training / 255.0
x_test = x_test / 255.0


%matplotlib inline

import matplotlib.pyplot as plt
plt.imshow(x_training[3])
plt.show


from keras.models import Sequential
from keras.layers import Dense, Flatten,Conv2D , MaxPooling2D, Dropout
import tensorflow as tf

model = Sequential()


model.add(Conv2D(32, kernel_size=(3, 3), input_shape=(32, 32, 3), activation="relu", padding="same"))
model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(Conv2D(64, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(128, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(Conv2D(128, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation="relu"))
model.add(Dense(128, activation="relu"))
model.add(Dense(1, activation="sigmoid"))


model.compile(optimizer='RMSProp', loss="binary_crossentropy", metrics=['accuracy'])
model.summary()

model.fit(x_training, y_training,batch_size=128, epochs=10, shuffle = True )

model.evaluate(x_training, y_training)
results = model.predict(x_training[1].reshape(-1, 32, 32, 3))
results


class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
               'dog', 'frog', 'horse', 'ship', 'truck']

max = np.max(results)
max_position = np.argmax(results)
class_name_predict = class_names[max_position]


plt.imshow(x_training[1])
plt.show

test = class_name_predict
test


plt.imshow(x_training[1])
plt.show


x = class_names[y_training[1][0]]
x

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


您的模型中有一些错误:

多类问题的输出层的维度必须等于具有 softmax 激活函数的类数

多类问题的标准损失是categorical_crossentropysparse_categoricalcrossentropycategorical_crossentropy当你的目标是单热编码sparse_categoricalcrossentropy时可以使用,当你有整数编码标签时使用(这是你的情况)

model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3), input_shape=(32, 32, 3), activation="relu", padding="same"))
model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(Conv2D(64, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(128, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(Conv2D(128, kernel_size=(3, 3), activation="relu", padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation="relu"))
model.add(Dense(128, activation="relu"))
model.add(Dense(len(class_names), activation="softmax"))

model.compile(optimizer='RMSProp', loss="sparse_categorical_crossentropy", metrics=['accuracy'])
model.summary() 

这里是正在运行的笔记本


推荐阅读