【发布时间】:2021-10-28 06:47:10
【问题描述】:
我在 tensorflow 中有一个具有 6 个隐藏层的卷积神经网络,现在我有两个用于分类的类,但在最后一个密集层(softmax 激活函数)。因为我有两个类,所以输出层需要两个神经元,但是每当我放两个时,我就会得到错误:
' ValueError: logits 和 labels 必须具有相同的形状 ((None, 2) vs (None, 1))'
但是,它适用于一个神经元。
这是我创建模型的代码:
import tensorflow as tf
import tensorflow.keras as keras
import os
import math
import cv2
import numpy as np
from tensorflow.keras import regularizers
from tensorflow.keras.models import Sequential
train_imgdata=[]
train_classes=[]
test_imgdata=[]
test_classes=[]
TYPE={"Dataset/Train", "Dataset/Validate"}
Category={"Glaucoma", "Non-Glaucoma"}
def GetData():
for n, tpe in enumerate(TYPE):
if n==0:
for i, cat in enumerate(Category):
clss=i
OGpath=os.path.join(tpe,cat)
print (OGpath)
for file in os.listdir(OGpath):
filepath=os.path.join (OGpath, file)
image=cv2.imread(filepath)
image_resized=cv2.resize(image,(1700,1300))
train_imgdata.append(image_resized)
train_classes.append(clss)
else:
for i, cat in enumerate(Category):
clss=i
OGpath=os.path.join(tpe,cat)
print (OGpath)
for file in os.listdir(OGpath):
filepath=os.path.join (OGpath, file)
image=cv2.imread(filepath)
image_resized=cv2.resize(image,(1700,1300))
test_imgdata.append(image_resized)
test_classes.append(clss)
def plot_history (training):
axs[0].plot(training.history["accuracy"], label="train accuracy")
axs[0].plot(training.history["val_accuracy"], label="validation accuracy")
axs[0].set_ylabel("Accuracy")
axs[0].setlegend(loc="lower right")
axs[0].set.set_title("Accuracy_eval")
def CreateModel(InShape):
model = tf.keras.models.Sequential()
# 1st conv layer
model.add(keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(1300, 1700,3), kernel_regularizer=regularizers.l2(0.01)))
model.add(keras.layers.MaxPooling2D((3, 3), strides=(2, 2), padding='same'))
model.add(keras.layers.Dropout(0.3))
# 2nd conv layer
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(keras.layers.MaxPooling2D((3, 3), strides=(2, 2), padding='same'))
model.add(keras.layers.Dropout(0.3))
# 3rd conv layer
model.add(keras.layers.Conv2D(128, (2, 2), activation='relu'))
model.add(keras.layers.MaxPooling2D((2, 2), strides=(2, 2), padding='same'))
model.add(keras.layers.Dropout(0.3))
# flatten output and feed it into dense layer
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dropout(0.3))
# output layer
model.add(keras.layers.Dense(2, activation='sigmoid'))
return model
if __name__=="__main__":
GetData()
real_train_imgdata=np.array(train_imgdata)
real_train_classes=np.array(train_classes)
real_test_imgdata=np.array(test_imgdata)
real_test_classes=np.array(test_classes)
inputshape=(real_train_imgdata.shape[1], real_train_imgdata.shape[2], real_train_imgdata.shape[3])
model=CreateModel(inputshape)
optimiser= keras.optimizers.Adam (learning_rate=0.001)
model.compile(optimizer=optimiser,
loss="binary_crossentropy",
metrics=["accuracy"])
model.summary()
model.fit(real_train_imgdata, real_train_classes, validation_data=(real_test_imgdata, real_test_classes), batch_size=3, epochs=30)
【问题讨论】:
标签: tensorflow keras jupyter-notebook tensorflow2.0