所以我在這里和 Python 也是新手。我正在嘗試建立自己的網路。我找到了一些 15x15 的檔案和貓的圖片,不幸的是無法制作這個基本的網路......
所以,這些是我正在使用的庫
from tensorflow.keras.models import Sequential
from tensorflow.keras import utils
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import GlobalMaxPooling2D
身體
train_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'drive/MyDrive/cats vs dogs/cats vs dogs/training',
color_mode="rgb",
batch_size=32,
image_size=(150, 150),
shuffle=True,
seed=42,
validation_split=0.1,
subset='training',
interpolation="bilinear",
follow_links=False,
)
validation_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'drive/MyDrive/cats vs dogs/cats vs dogs/training',
color_mode="rgb",
batch_size=32,
image_size=(150, 150),
shuffle=True,
seed=42,
validation_split=0.1,
subset='validation',
interpolation="bilinear",
follow_links=False,
)
test_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'drive/MyDrive/cats vs dogs/cats vs dogs/test',
batch_size = 32,
image_size = (150, 150),
interpolation="bilinear"
)
model = Sequential()
model.add(keras.Input(shape=(150, 150, 3)))
model.add(Conv2D(32, 5, strides=2, activation="relu"))
model.add(Conv2D(32, 3, activation="relu"))
model.add(MaxPooling2D(3))
model.add(Dense(250, activation='sigmoid'))
model.add(Dense(100))
model.add(MaxPooling2D(3))
model.add(Dense(2))
model.summary()
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit(train_dataset, validation_data=validation_dataset, epochs=5, verbose=2)
我得到這個錯誤
Incompatible shapes: [29] vs. [29,7,7,2]
[[node gradient_tape/binary_crossentropy/mul_1/BroadcastGradientArgs
(defined at /usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:464)
]] [Op:__inference_train_function_4364]
Errors may have originated from an input operation.
Input Source operations connected to node
gradient_tape/binary_crossentropy/mul_1/BroadcastGradientArgs:
In[0] gradient_tape/binary_crossentropy/mul_1/Shape:
In[1] gradient_tape/binary_crossentropy/mul_1/Shape_1
我試圖從binary_crossentropy改為categorical_crossentrapy但它沒有幫助,我想我的錯誤在于資料集或輸入,但我不知道如何解決它:(
真的希望能在這里找到幫助!
[我的架構][1] [1]:https://i.stack.imgur.com/w4Y9N.png
uj5u.com熱心網友回復:
您需要在某處展平您的預測,否則您將輸出一個影像(29 個大小為 7x7 的樣本,具有 2 個通道),而您只需要一個平面的 2 維 logits(因此形狀為 29x2)。您使用的架構有點奇怪,您的意思是在第一個 Dense 層之前進行扁平化操作,然后沒有“maxpooling2d”(因為它對扁平化信號沒有意義)?混合使用 relu 和 sigmoid 激活也是非常不標準的,我鼓勵您從已建立的架構開始,而不是嘗試組合自己的架構來獲得一些直覺。
model = Sequential()
model.add(keras.Input(shape=(150, 150, 3)))
model.add(Conv2D(32, 5, strides=2, activation="relu"))
model.add(Conv2D(32, 3, activation="relu"))
model.add(MaxPooling2D(3))
model.add(Flatten())
model.add(Dense(250, activation="relu"))
model.add(Dense(100, activation="relu"))
model.add(Dense(2))
model.summary()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362897.html
上一篇:輸入0與層inception_v3不兼容預期形狀=(None,299,299,3),foundshape=(1,229,229,3)
