设置密集层以从一维数组中学习
Setup dense layers to learn from 1D arrays
我有大约 100k 个大小为 256 的数组,我想将其输入到由几个密集层组成的神经网络中,并输出 100k 个大小为 256 的数组。(我希望我的网络能够转换输入数组到输出数组)。我无法正确设置它。
我的 X_train
和 y_train
的形状是 (98304, 256)
,我的 X_test
和 y_test
(16384, 256)
.
我目前的网络是
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 左右的向量。
此外,如果我尝试使用 y_pred=model.predict(Xval[3])
预测单个向量,我会得到错误
ValueError: Error when checking : expected dense_27_input to have shape (256,) but got array with shape (1,)
你的第一层只有1
个输出神经元,这似乎是错误的。它可能会弄乱你的损失函数。尝试将 model.add(Dense(1, input_shape=(256,), activation='relu'))
替换为 model.add(InputLayer(input_shape=(256,)))
.
我有大约 100k 个大小为 256 的数组,我想将其输入到由几个密集层组成的神经网络中,并输出 100k 个大小为 256 的数组。(我希望我的网络能够转换输入数组到输出数组)。我无法正确设置它。
我的 X_train
和 y_train
的形状是 (98304, 256)
,我的 X_test
和 y_test
(16384, 256)
.
我目前的网络是
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 左右的向量。
此外,如果我尝试使用 y_pred=model.predict(Xval[3])
预测单个向量,我会得到错误
ValueError: Error when checking : expected dense_27_input to have shape (256,) but got array with shape (1,)
你的第一层只有1
个输出神经元,这似乎是错误的。它可能会弄乱你的损失函数。尝试将 model.add(Dense(1, input_shape=(256,), activation='relu'))
替换为 model.add(InputLayer(input_shape=(256,)))
.