Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python keras卡在0损失值_Python_Tensorflow_Keras - Fatal编程技术网

Python keras卡在0损失值

Python keras卡在0损失值,python,tensorflow,keras,Python,Tensorflow,Keras,我要把这张x光片分为细菌、病毒和正常三类。问题是我的准确率真的很低,比如25%,而损失一直是0。我使用一个预训练的神经网络,它使用来自X射线胸部图像数据集的权重。此nn使用keras.loss.CategoricalCrossentropy作为损失函数,使用keras.metrics.accurity()作为精度 import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers

我要把这张x光片分为细菌、病毒和正常三类。问题是我的准确率真的很低,比如25%,而损失一直是0。我使用一个预训练的神经网络,它使用来自X射线胸部图像数据集的权重。此nn使用keras.loss.CategoricalCrossentropy作为损失函数,使用keras.metrics.accurity()作为精度

    import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

TRAIN_DIR = 'D:/tf/archiveBilanciato/chest_xray/train/PNEUMONIA'
TEST_DIR = 'D:/tf/archiveBilanciato/chest_xray/test'
IMG_SIZE = 224  #224 è quella migliore
image_size = (IMG_SIZE, IMG_SIZE)
batch_size = 32
LR = 1e-3

import os

nt = 0
for folder_name in ("bacteria", "normal","virus"):
    folder_path = os.path.join("D:/tf/NeoArchiveBilanciato/chest_xray", folder_name)
    for fname in os.listdir(folder_path):
        fpath = os.path.join(folder_path, fname)
        nt += 1
print("Totale immagini: %d" % nt)


train_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "D:/tf/NeoArchiveBilanciato/chest_xray",
    validation_split=0.2,
    subset="training",
    seed=1337,
    color_mode='rgb',
    image_size=image_size,
    batch_size=batch_size,
)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "D:/tf/NeoArchiveBilanciato/chest_xray",
    validation_split=0.2,
    subset="validation",
    seed=1337,
    color_mode='rgb',
    image_size=image_size,
    batch_size=batch_size,
)
import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras.applications import DenseNet121
from keras.layers import GlobalAveragePooling2D,Dense

def pre_model():
    base_model = tf.keras.applications.DenseNet121(
        weights='imagenet', include_top=False, input_shape=(224, 224, 3))

    x = base_model.output
    x = GlobalAveragePooling2D()(x)
    predictions = Dense(14, activation="softmax")(x)
    pre_model = keras.Model(inputs=base_model.input, outputs=predictions)

    return pre_model

base_model = pre_model()
base_model.load_weights("D:/tf/nih_pretrained_chest_model.h5")
#print(base_model.summary())


from keras.layers import Input
#from tensorflow.keras.layers import Input
from kerassurgeon.operations import delete_layer, insert_layer
from keras.models import load_model
new_input = Input(shape=(IMG_SIZE, IMG_SIZE, 3), name='image_input')
model_imp = base_model
model_imp = Dense(3, activation='softmax')(model_imp.layers[-2].output)



base_model.trainable = False
mio_classificatore = Dense(1, activation='softmax')(base_model.layers[-2].output)

nuovo_model = keras.Model(inputs=base_model.input, outputs=mio_classificatore)

#print(nuovo_model.summary())

train = train_ds
val = val_ds


nuovo_model.compile(optimizer=keras.optimizers.Adam(),
              loss=keras.losses.CategoricalCrossentropy(),
              metrics=[keras.metrics.Accuracy()])

nuovo_model.fit(train,batch_size=32, epochs=14, validation_data=val)

如何解决这个问题?

有3个类别需要预测,因此模型的最后一层应该包含3个神经元(每个类别1个),而不是1个神经元

尝试改变

mio_classificatore = Dense(1, activation='softmax')(base_model.layers[-2].output)


您不能将softmax与一个神经元一起使用,它将产生恒定的输出。谢谢您的回答。当我这样做时,我会得到以下错误:ValueError:Shapes(None,1)和(None,3)不兼容
mio_classificatore = Dense(3, activation='softmax')(base_model.layers[-2].output)