我無法將適當的輸入形狀傳遞給具有 Conv2D 層的基于 CNN 的網路。最初,這些是我的火車形狀。我的火車資料被改造成視窗:
X_train: (7,100,5185)= (number of features, window size, number of windows)
y_train= (5185, 100 ) = one labeled column that is also windowed
然后我從這些資料中計算出一些回圈圖,然后我將得到這些形狀:
X_train_rp= (5185, 100,100, 7), 100 * 100 referring to my images
y_train = (5185, 100 ), remains unchanged
我將這兩個傳遞給基于 conv2D 的 CNN:
model.add(layers.Conv2D(64, kernel_size=3, activation='relu', input_shape=(100, 100, 7)))
我收到這個錯誤: Data cardinality is ambiguous: x sizes: 100, 100, 100 ......... y sizes: 5185 Make sure all arrays contain the same number of samples.
我嘗試了許多形狀的組合,但徒勞無功!我究竟做錯了什么 ??
編輯:這是使用的模型定義
import tensorflow as tf
X_train_rp = tf.zeros((10, 100,100, 7))
y_train = tf.zeros((10, 100))
#create model
model = tf.keras.Sequential() #add model layers
model.add(tf.keras.layers.Conv2D(64, kernel_size=3, activation='relu',
data_format='channels_last', input_shape=(100, 100, 7)))
model.add(tf.keras.layers.Conv2D(32, kernel_size=3, activation='relu'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(2, activation='softmax'))
#compile model using accuracy to measure model performance
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train_rp, y_train_shaped, epochs=3)
model.predict(X_train_rp)
uj5u.com熱心網友回復:
從使用的模塊別名來看,我假設您使用具有順序模型定義的 tensorflow keras 包。這個改編自 keras檔案的代碼片段實際上證明了您對輸入形狀的假設是正確的:
import tensorflow as tf
input_shape = (10, 100, 100, 7)
x = tf.random.normal(input_shape)
y = tf.keras.layers.Conv2D(filters=64, kernel_size=3, activation='relu', input_shape=input_shape[1:])(x)
print(y.shape)
>>> (10, 98, 98, 64)
這意味著問題出在您的順序模型定義中。請更新您的問題并包含必要的代碼。
編輯:
使用 OP 提供的模型定義并稍作修改即可產生有效的訓練程序。問題在于密集層的定義,它將output節點作為第一個位置引數而不是輸入維度。
為了計算成本,我將訓練示例的數量從 (5185) 減少到 (10)...
import tensorflow as tf
X_train_rp = tf.zeros((10, 100,100, 7))
y_train = tf.zeros((10, 100))
#create model
model = tf.keras.Sequential() #add model layers
model.add(tf.keras.layers.Conv2D(64, kernel_size=3, activation='relu',
data_format='channels_last', input_shape=(100, 100, 7)))
model.add(tf.keras.layers.Conv2D(32, kernel_size=3, activation='relu'))
model.add(tf.keras.layers.Flatten())
# Here comes the fix:
model.add(tf.keras.layers.Dense(100, activation='softmax'))
#compile model using accuracy to measure model performance
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train_rp, y_train, epochs=3)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/383704.html
上一篇:Linq如何知道元素的名稱?
