簡體   English   中英

Tensorflow 沒有為任何變量提供梯度

[英]Tensorflow No gradients provided for any variable

我是 Tensorflow 和機器學習的新手。 我正在嘗試創建一個 model 來通過 MRI 檢測腦腫瘤。

我正在使用validation_split拆分數據。 編譯 model 后,當我嘗試使用.fit function 進行擬合時,出現此錯誤。 谷歌搜索后我發現我可能是因為在調用fit function 時我沒有傳遞y參數。

代碼

datagen = ImageDataGenerator(validation_split=0.2, rescale=1. / 255)

train_generator = datagen.flow_from_directory(
    TRAIN_DIR,
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary',
    subset='training'
)

val_generator = datagen.flow_from_directory(
    TRAIN_DIR,
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary',
    subset='validation'
)

model = tf.keras.models.Sequential()
model.add(
    tf.keras.layers.Conv2D(
        16,
        (3, 3),
        activation='relu',
        input_shape=(150, 150, 3)
    )
)
model.add(
    tf.keras.layers.MaxPool2D(2, 2)
)

...
# some more layers
...

model.compile(
    optimizer='adam',
    loss=None,
    metrics=['accuracy'],
)

print(model.summary())

Test = model.fit(
    train_generator,
    epochs=2,
    verbose=1,
    validation_data=val_generator
)

我究竟做錯了什么?

圖片的文件夾結構

images
|
├── training
│   ├── no
│   ├── yes
├── testing
│   ├── no
│   ├── yes

確切的錯誤信息

ValueError: No gradients provided for any variable: ['conv2d/kernel:0', 'conv2d/bias:0', 'conv2d_1/kernel:0', 'conv2d_1/bias:0', 'conv2d_2/kernel:0', 'conv2d_2/bias:0', 'dense/kernel:0', 'dense/bias:0', 'dense_1/kernel:0', 'dense_1/bias:0'].

model.summary() 的 Output

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
conv2d (Conv2D)              (None, 148, 148, 16)      448
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 74, 74, 16)        0
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 72, 72, 32)        4640
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 36, 36, 32)        0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 34, 34, 64)        18496
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 17, 17, 64)        0
_________________________________________________________________
flatten (Flatten)            (None, 18496)             0
_________________________________________________________________
dense (Dense)                (None, 512)               9470464
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 1026
=================================================================
Total params: 9,495,074
Trainable params: 9,495,074
Non-trainable params: 0

這是因為您將損失設置為None ,沒有提供從損失 function 回到您的 model 的梯度。 調整

model.compile(
    optimizer='adam',
    loss=None,
    metrics=['accuracy'],
)

model.compile(
    optimizer='adam',
    loss='mse', # or some other loss
    metrics=['accuracy'],
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM