设置密集层以学习一维阵列

2024-03-29 09:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约100k大小为256的数组,我想输入一个由几个密集层组成的神经网络,然后输出100k大小为256的数组。(我希望我的网络将输入数组转换为输出数组)。我无法正确设置它

我的X_trainy_train有形状(98304, 256),我的X_testy_test{}

我目前的网络是

model = Sequential()
model.add(Dense(1, input_shape=(256,), activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(256, activation='linear'))

optimizer = Adam()
model.compile(optimizer=optimizer,loss='mean_squared_error',metrics=['accuracy', 'mae'])

网络实际上是运行的,但它没有给出任何有意义的结果。它在20个纪元后停止,因为我让它提前停止

Epoch 00019: val_loss did not improve from -inf
Epoch 20/200
6400/6400 [==============================] - 1s 232us/step - loss: nan - acc: 0.2511 - mean_absolute_error: nan - val_loss: nan - val_acc: 0.2000 - val_mean_absolute_error: nan

如果我尝试用它来预测,我只得到nan值(我的训练集中没有任何nan)

希望有人能帮我。提前谢谢

编辑 为了检查输入或算法是否有问题,我尝试使用以下代码创建输入和目标

X_train=[]
y_train=[]

for it in range(1000):
    beginning=random.uniform(0,1)
    end=random.uniform(0,1)
    X_train.append([beginning+(end-beginning)*jt/256 for jt in range(256)])
    y_train.append([end+(beginning-end)*jt/256 for jt in range(256)])
X_train=np.array(X_train)
y_train=np.array(y_train)

而我仍然得到

Epoch 27/200
1000/1000 [==============================] - 0s 236us/step - loss: nan - acc: 0.4970 - mean_absolute_error: nan

Edit2:如果我增加网络的复杂性,我会使用使用上述功能创建的10k训练阵列,设法获得不同于nan的损耗。然而,结果仍然很糟糕,这让我怀疑我没有正确设置网络

新网络:

model = Sequential()
model.add(Dense(1, input_shape=(256,), activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(256, activation='linear'))

optimizer = Adam()
model.compile(optimizer=optimizer,loss='mean_squared_error',metrics=['mae'])

model.summary()

以及它们收敛时的结果

Epoch 33/200
10000/10000 [==============================] - 23s 2ms/step - loss: 0.0561 - mean_absolute_error: 0.2001 - val_loss: 0.0561 - val_mean_absolute_error: 0.2001

如果我检查网络的输出,我总是得到一个向量,所有点都在0.5左右,不管输入是什么

Prediction Example

另外,如果我尝试使用y_pred=model.predict(Xval[3])预测单个向量,我会得到错误

ValueError: Error when checking : expected dense_27_input to have shape (256,) but got array with shape (1,)

Tags: 网络addmodeltrainerrorval数组nan
1条回答
网友
1楼 · 发布于 2024-03-29 09:38:42

您的第一层只有1输出神经元,这似乎是错误的。这可能会弄乱你的损失函数。尝试用model.add(InputLayer(input_shape=(256,)))替换model.add(Dense(1, input_shape=(256,), activation='relu'))

相关问题 更多 >