Python 神经网络中的恒损耗
我的神经网络接收一个Python 神经网络中的恒损耗,python,tensorflow,keras,deep-learning,loss,Python,Tensorflow,Keras,Deep Learning,Loss,我的神经网络接收一个(1000,1000,5)形状阵列,该阵列在一个分支(5个堆叠光栅图像)中进行卷积,并接收一个(12)形状阵列(仅12个数字),该阵列在第二个分支中穿过两个密集层 输出被连接成(31,31,65)形状张量,然后反褶积成最终的(1000,1000)形状数组 我的问题: 我制作了自己的简单损失函数(平均误差),因为输出代表一个区域的温度。 我目前的问题是,我的损失在200多个时期内显著下降(无论是损失还是val_损失,从一个小小数点到大约-3),整个时间的准确度都在0.002左右
(1000,1000,5)
形状阵列,该阵列在一个分支(5个堆叠光栅图像)中进行卷积,并接收一个(12)
形状阵列(仅12个数字),该阵列在第二个分支中穿过两个密集层
输出被连接成(31,31,65)
形状张量,然后反褶积成最终的(1000,1000)
形状数组
我的问题:
我制作了自己的简单损失函数(平均误差),因为输出代表一个区域的温度。
我目前的问题是,我的损失在200多个时期内显著下降(无论是损失
还是val_损失
,从一个小小数点到大约-3),整个时间的准确度都在0.002左右。
我已将学习率更改为低至1e-5
。我给训练集提供了更多的样本(不幸的是,开始时样本不多),增加了(担心过度拟合)和减少了(缺少数据)批量大小。所有输入数据都被标准化为0:1,这使得超出-1
的任何损失都是不合理的
我不确定我是否应该为这个任务使用不同的优化器,或者不同的激活,或者只是删除一两层。但最重要的是,我想了解是什么让这个模型如此不可靠。
我真的试着不把整件事都贴在这里,但我已经完全没有想法了
传销部
dim=12
输入=输入(形状=(尺寸,))
x=输入
x=密集(尺寸*4,激活='relu')(x)
x=密集(尺寸*16,激活='relu')(x)
x=密集(961,激活='relu')(x)#961个节点
x=重塑((31,31,1))(x)#(31,31,1)数组
模型1=模型(输入,x)
卷积分支
inputShape=(1000,1000,5)
chanDim=-1
输入=输入(形状=输入形状)
x=输入
#第1层:conv,f=8,pool=2
x=Conv2D(8,(3,3),padding='same',activation='relu')(x)
x=批次标准化(轴=chanDim)(x)
x=MaxPoolig2D(池大小=(2,2))(x)
#第二层:conv,f=16,pool=2
x=Conv2D(16,(3,3),padding='same',activation='relu')(x)
x=批次标准化(轴=chanDim)(x)
x=MaxPoolig2D(池大小=(2,2))(x)
#第三层:conv,f=32,pool=2
x=Conv2D(32,(3,3),padding='same',activation='relu')(x)
x=批次标准化(轴=chanDim)(x)
x=MaxPoolig2D(池大小=(2,2))(x)
#第4层:conv=64,pool=4
x=Conv2D(64,(3,3),padding='same',activation='relu')(x)
x=批次标准化(轴=chanDim)(x)
x=MaxPoolig2D(池大小=(4,4))(x)
模型2=模型(输入,x)
反褶积
combinedInput=Concatenate()([model1.output,model2.output])
x=组合输入(31,31,65)
x=Conv2DTranspose(43,(3,3),步幅=(4,4),填充='same',激活='relu')(x)#(124,124,43)
x=Conv2DTranspose(22,(3,3),步幅=(2,2),填充='same',激活='relu')(x)#(248248,248,22)
x=Lambda(Lambda y:space_2d_padding(y))(x)#(250250,22)
x=Conv2DTranspose(10,(3,3),步幅=(2,2),填充='same',激活='relu')(x)#(500500,10)
x=Conv2DTranspose(1,(3,3),步幅=(2,2),填充=‘相同’,激活=‘线性’(x)#(1000,1000,1)
x=λ(λy:挤压(y,轴=3))(x)#(10001000)
编撰
def自定义损耗(y_实际,y_预测):
自定义损失值=平均值(y_实际值-y_预测值)
返回自定义损失值
模型=模型(输入=[mlp.input,cnn.input],输出=x)
compile(loss=custom_loss,optimizer=Adam(lr=0.000001),metrics=['mae']))
#历次=200的列车,批量=12
问题
正如我在上面所解释的,我的损失从未稳定下来,在各个时代,准确率大致徘徊在相同的数字上
我想知道可能的原因和可能的解决办法。
编辑:
自从写下这个问题以来,我试图:
- 从卷积分支到反卷积分支
- 在每个
层之后添加conv2dtranpse()
BatchNormalization()