【发布时间】:2020-11-21 23:58:13
【问题描述】:
我正在尝试创建一个 CNN,它可以区分有/没有糖尿病视网膜病变症状的眼睛的黑白照片。当我尝试运行我的模型时,准确性根本没有提高。我尝试使用不同的学习率,但没有奏效。由于这是我第一次制作 CNN,我想我可能在其他地方犯了错误。如果您在我的代码中发现问题,请告诉我,非常感谢您的帮助。
Train on 980 samples, validate on 327 samples
Epoch 1/5
980/980 [==============================] - 777s 792ms/step - loss: 8.1986 - accuracy: 0.4653 - val_loss: 8.8154 - val_accuracy: 0.4251
Epoch 2/5
980/980 [==============================] - 666s 679ms/step - loss: 8.1986 - accuracy: 0.4653 - val_loss: 8.8154 - val_accuracy: 0.4251
Epoch 3/5
980/980 [==============================] - 672s 686ms/step - loss: 8.1986 - accuracy: 0.4653 - val_loss: 8.8154 - val_accuracy: 0.4251
这是我的代码:
DATADIR = "C:\\Users.."
CATEGORIES = ["nosymptoms", "symptoms"]
training_data = []
IMG_SIZE = 512
for category in CATEGORIES:
path = os.path.join(DATADIR, category) #brings us to folder with categories
class_num = CATEGORIES.index(category)
for img in os.listdir(path):
img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) #img resized and becomes array
training_data.append([new_array, class_num]) #classification is appended to image
import random
random.shuffle(training_data)
for sample in training_data[:10]:
print(sample[1])#0 is the image array, 1 is the label
X = [] #features set
y = [] #labels
X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1)#shape of features (-1 means any), img size, 1 (b/c it is a grayscale)
#Save data
import pickle
pickle_out = open("X.pickle","wb")
pickle.dump(X, pickle_out)
pickle_out.close()
pickle_out = open("y.pickle","wb")
pickle.dump(y, pickle_out)
pickle_out.close()
X = pickle.load(open("X.pickle", "rb"))
y = pickle.load(open("y.pickle", "rb"))
X = X/255.0
model = Sequential()
model.add(Convolution2D(32, (3,3),input_shape=(X.shape[1:]),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(16, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(1, activation='softmax'))
from keras.optimizers import SGD
opt = SGD(lr=0.01)
model.compile(loss = "binary_crossentropy", optimizer = opt, metrics=['accuracy'])
print(model.summary())
model.fit(X, y, batch_size = 16, epochs = 5, validation_split=.25)
【问题讨论】:
-
你能用一些东西更新你的问题吗?一,运行 15 个 epoch 并发布输出,而不是 3 个 epoch。其次,你能发布 X 和 y 的样子吗?
-
发生这种情况是因为您使用带有一个神经元的 softmax,这会产生恒定的输出,这里有数百个问题与相同的问题。只需将激活更改为 sigmoid。
标签: python machine-learning keras deep-learning conv-neural-network