我是机器学习和Keras的新手。实际上我和scikit-learn一起工作但是Keras看起来有点复杂。我的问题是我有一些3D数据并希望将其放入Dense层(我也尝试过使用Conv2D和Conv1D层)。 我所做的如下:
FluentState::singleton()->withState(function (FluentState $newState) {
$newState->setLocale('de_DE');
// ...
});
我在适当的步骤中得到错误。错误如下:
arr1 = np.random.random((30,2))
arr2 = np.random.random((30,2))
arr3 = np.random.random((30,2))
arr4 = np.random.random((30,2))
arr5 = np.random.random((30,2))
arr6 = np.random.random((30,2))
x_matrix = np.dstack(
(arr1
,arr2
,arr3
,arr4
,arr5
,arr6)
).swapaxes(1,2)
print(x_matrix.shape)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x_matrix, y_matrix, test_size=0.33, random_state=42)
from keras.models import Sequential
model = Sequential()
from keras.layers import Dense, Conv2D, Conv1D, Flatten
model = Sequential()
model.add(Dense(6, activation='sigmoid', input_shape=(6,2)))
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
model.fit(np.array(X_train), np.array(y_train), epochs=20, batch_size=1)#
score = model.evaluate(X_test, y_test)
print(score)
对于Conv1D图层我尝试了这个:
ValueError: Error when checking target: expected dense_1 to have 3 dimensions, but got array with shape (20, 2)
并提出了这个错误:
model.add(Conv1D(6, (2), activation='sigmoid', input_shape=(6 ,2)))
Conv2D似乎更复杂我可能不需要这个作为我的输入层但是通过以下调用我仍然有同样的错误。
ValueError: Error when checking target: expected conv1d_1 to have 3 dimensions, but got array with shape (20, 2)
我要问的是:我怎样才能将这样的数据融入到Keras的神经网络中?
答案 0 :(得分:1)
首先,您必须了解您的数据是什么以及您想要用它做什么。
然后,您决定如何整形数据以及使用哪些图层。
但是有一些重要的惯例:
(30,6,2)
,因此您确定您有30个样本,每个样本的形状为(6,2)
- 这就是了解您的数据以及您想要做什么的重要原因。 target
的形状:(20,2)
< - 这是Y的形状。(30,6,units)
(samples, length, input_channels)
,输出形状为(samples, modified_length, filters)
。 (samples, width, heigth, input_channels)
,并输出(samples, modified_width, modified_height, filters)
Flatten
,Reshape
,GlobalMaxPooling1D
或{{{ 1}}层。 提示:使用GlobalAveragePooling1D
查看每个图层的输出形状以及最终的输出形状。
提示2:首先清楚地定义您的数据和目标,然后是X和Y的形状,然后是模型的形状。