Python CNN问题
我现在正在为一个小小的CNN制作Cifar-10数据集。我只是不时地更新一下我的代码,现在它不起作用了。我想不出这个错误。预言告诉我“不是一个数字”。我找不到问题的答案。所以我不能不多加一点文字就发布这个问题。我知道我应该在这里写什么。现在吃一顿丰盛的早餐就好了。咖啡和煎饼之类的。我希望我现在能把问题发出去Python CNN问题,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我现在正在为一个小小的CNN制作Cifar-10数据集。我只是不时地更新一下我的代码,现在它不起作用了。我想不出这个错误。预言告诉我“不是一个数字”。我找不到问题的答案。所以我不能不多加一点文字就发布这个问题。我知道我应该在这里写什么。现在吃一顿丰盛的早餐就好了。咖啡和煎饼之类的。我希望我现在能把问题发出去 from keras.datasets import cifar10 import numpy as np (x_training, y_training), (x_test,y_test
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
您的模型中存在一些错误: 多类问题的输出层的维数必须等于具有softmax激活函数的类数 多类问题的标准损失是
categorical\u crossentropy
和sparse\u categorical crossentropy
<当您的目标是一个热编码时,可以使用代码>分类交叉熵,稀疏分类交叉熵
当您有整数编码标签时使用(这是您的情况)
它工作正常。但是我不太理解输出层的问题。因此,如果我使用的是叠加在另一层上的过滤器,我通常必须使最后一个过滤器层看起来像这样?你可以叠加任何你想要的东西,但在一个多类问题中的最后一层必须有等于类数的单位/神经元和一个softmax激活来重现概率
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()