我是 TensorFlow 和深度學習的新手,我的第一個任務是對灰度影像中的陣列進行二進制分類。我在這段代碼中的陣列(array_a 到 array_h)應該作為一個例子。
我有許多陣列(array_a 到 array_h),形狀為(300x300),有零和一。這些陣列應該是我作為 training_data (x_train) 的輸入。我想用另一個形狀為(8x1)的陣列(label_array_train)標記這些陣列。這個陣列應該是我作為 y_train 或目標資料的輸入。
我的想法是使用 np.concatenate 將我的陣列連接成一個陣列,將其轉換為張量并將其提供給我的 NN。我還在我的 label_array_train 上使用 tf.convert_to_tensor 來獲得另一個張量。我想用 label_array_train(0 或 1)中的一個標簽來標記每個陣列。帶零的陣列應該用 0 標記,帶 1 的陣列應該用 1 標記。由于我的資料大小不同,我得到一個錯誤。但我不知道如何正確處理或準備我的輸入資料,以獲得我的 tran_data 和標簽的完美形狀和大小。
我收到此錯誤:
Data cardinality is ambiguous:
x sizes: 2400
y sizes: 8
Make sure all arrays contain the same number of samples.
File "C:\Users\Niklas\Desktop\Python\Versuch 3.py", line 94, in <module>
model.fit(train_data,...
我的代碼:
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, AvgPool2D
from tensorflow.keras.optimizers import Adam
import numpy as np
我的訓練陣列有 0 和 300,300 的形狀
array_a= np.zeros((300,300))
array_b= np.ones((300,300))
array_c= np.ones((300,300))
array_d= np.zeros((300,300))
array_e= np.zeros((300,300))
array_f= np.zeros((300,300))
array_g= np.zeros((300,300))
array_h= np.ones((300,300))
我的陣列用于標記 train_data 的所有陣列
label_array_train = np.array([0,1,1,0,0,0,0,1], dtype = np.float)
將所有陣列連接成一個
train_array = np.concatenate((array_a,array_b,array_c,array_d,array_e,array_f,array_g,array_h), axis=0)
將其轉換為張量以與 Tensorflow 兼容
train_data = tf.convert_to_tensor(train_array, np.float32)
labels = tf.convert_to_tensor(label_array_train, np.float32)
我的模型
model = Sequential([Conv2D(filters= 32, kernel_size= (3, 3), activation= 'relu', input_shape = (300,300,1)),
AvgPool2D(2, 2),
Conv2D(filters= 32, kernel_size= (3, 3), activation= 'relu'),
AvgPool2D(2, 2),
Conv2D(filters= 64, kernel_size= (3, 3), activation= 'relu'),
AvgPool2D(2, 2),
Conv2D(filters= 64, kernel_size= (3, 3), activation= 'relu'),
AvgPool2D(2, 2),
Flatten(),
Dense(units= 512, activation= 'relu'),
Dense(units= 1, activation= 'sigmoid')])
model.compile(optimizer=Adam (learning_rate= 0.0005),
loss= 'binary_crossentropy',
metrics= ['accuracy'])
model.fit(train_data,
labels,
epochs=5,
verbose=1)
我的 training_data 與 print(train_array) 的形狀:
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]], shape=(2400, 300), dtype=float32)
我的標簽形狀與列印(標簽):
tf.Tensor([0. 1. 1. 0. 0. 0. 0. 1.], shape=(8,), dtype=float32)
我希望有人可以幫助我并在我的代碼中顯示我的錯誤或告訴我如何正確地做。
uj5u.com熱心網友回復:
使用np.stack代替,np.concatenate一切都應該作業:
train_array = np.stack((array_a,array_b,array_c,array_d,array_e,array_f,array_g,array_h), axis=0)
print(train_array.shape)
# (8, 300, 300)
uj5u.com熱心網友回復:
from tensorflow.keras.utils import to_categoritcal
...
model.fit(train_data,
to_categorical(labels),
epochs=5,
verbose=1)
uj5u.com熱心網友回復:
X形狀是問題。您必須將陣列初始化為:
array_a= np.zeros((1,300,300))
array_b= np.ones((1,300,300))
array_c= np.ones((1,300,300))
array_d= np.zeros((1,300,300))
array_e= np.zeros((1,300,300))
array_f= np.zeros((1,300,300))
array_g= np.zeros((1,300,300))
array_h= np.ones((1,300,300))*
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424169.html
