Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:从图像预测浮点值始终返回0_Python_Tensorflow - Fatal编程技术网

Python Tensorflow:从图像预测浮点值始终返回0

Python Tensorflow:从图像预测浮点值始终返回0,python,tensorflow,Python,Tensorflow,我有一个模型如下: 来自tensorflow导入keras的 从tensorflow.keras.layers导入稠密、Conv2D、展平、MaxPoolig2D 模型=keras.连续([ Conv2D(16,(3,3),padding='same',activation='relu',input_shape=(480,640,3),data_format=“channels_last”), MaxPoolig2D(), Conv2D(32,(3,3),padding='same',activ

我有一个模型如下:

来自tensorflow导入keras的

从tensorflow.keras.layers导入稠密、Conv2D、展平、MaxPoolig2D
模型=keras.连续([
Conv2D(16,(3,3),padding='same',activation='relu',input_shape=(480,640,3),data_format=“channels_last”),
MaxPoolig2D(),
Conv2D(32,(3,3),padding='same',activation='relu'),
MaxPoolig2D(),
Conv2D(64,(3,3),padding='same',activation='relu'),
MaxPoolig2D(),
展平(),
致密(480,活化='relu'),
密集(1,激活=“relu”)
])
model.compile(优化器='adam',
损失=keras.loss.MeanSquaredError(),
指标=[‘准确度’])
纪元=3
模型拟合(
x=列车图像,
y=列_值,
时代
)
变量
train_images
是一个PNG图像数组(640x480像素),而
train_值
是一个浮点数组(例如:
[1.11842,-17.894,2.03,…)

我的目标是预测浮点值(至少,找到一些近似值),因此我认为在这种情况下,MSE应该是损失函数

然而,在训练模型之后,我不仅用
model.predict(test\u images)
而且用
model.predict(train\u images)
得到零

注意:我必须回忆一下,我的批处理只包含37个图像,而我的测试样本包含14个。我知道大小很荒谬,但这个脚本只是一个更大的概念

如果有帮助,下面是
model.summary()
的结果:


首先,要更改激活函数,relu限制值,以便任何低于0=0的值都是不可能的

其次,对y值进行规格化,因为它可以是-inf到+inf之间的任意值,对它们进行范围规格化并存储规格化参数。在运行时,您始终可以将其反转并获得实际值

此外,我建议,如果一个小火车组的网络过多,那么它很可能会训练得很好

现在请尝试一下这些建议,我认为规范化非常重要


另外:我建议让网络更深一些,你需要提取图像中的形状和纹理,而你的网络可能不够深(事实上甚至不够密集)为此,我建议使用keras加载一个预先训练过的模型,如VGG16,去掉头部,添加回归层,然后将其转移到数据集中。这样做会更好。

从输出层删除relu…@xdurch0是的,这就是问题所在!非常感谢。事实上,代码
activation=“relu”
最后一层是问题所在。此外,我将尝试您的建议,并检查是否得到更好的结果:)
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 480, 640, 16)      448       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 240, 320, 16)      0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 240, 320, 32)      4640      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 120, 160, 32)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 120, 160, 64)      18496     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 60, 80, 64)        0         
_________________________________________________________________
flatten (Flatten)            (None, 307200)            0         
_________________________________________________________________
dense (Dense)                (None, 480)               147456480 
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 481       
=================================================================
Total params: 147,480,545
Trainable params: 147,480,545
Non-trainable params: 0