Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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 MNIST上的转移学习:错误标签错误_Python_Tensorflow_Transfer Learning - Fatal编程技术网

Python MNIST上的转移学习:错误标签错误

Python MNIST上的转移学习:错误标签错误,python,tensorflow,transfer-learning,Python,Tensorflow,Transfer Learning,所以我在MNIST数据集上用tensorflow训练了一个感知器,但只训练了数字0到4。然后,我制作了一个新模型,所有层和权重都相同,但新的输出层也有5个输出节点。我想训练这个新模型把数字5到9分类 我生成了一个新的x_序列和y_序列,只有数字5到9,然后运行 transfer\u model.fit(x\u train[train\u filter],y\u train[train\u filter],epoch=5) 其中列过滤器定义为np。其中(np.logical\u和(x\u列=9))

所以我在MNIST数据集上用tensorflow训练了一个感知器,但只训练了数字0到4。然后,我制作了一个新模型,所有层和权重都相同,但新的输出层也有5个输出节点。我想训练这个新模型把数字5到9分类

我生成了一个新的x_序列和y_序列,只有数字5到9,然后运行

transfer\u model.fit(x\u train[train\u filter],y\u train[train\u filter],epoch=5)

其中列过滤器定义为
np。其中(np.logical\u和(x\u列=9))

在培训的第一步,我遇到了以下错误:

InvalidArgumentError:收到的标签值为9,超出了[0,5]的有效范围。标签值:5 9 7 8 9 8 7 6 7 6 9 5 8 7 6 9 7 6 7 6 6

这是有意义的,因为我最初训练网络在[0,5]范围内进行分类,但现在我想在[5,10]范围内进行分类。我遗漏了一步吗?我不确定我遗漏了什么…我如何定义每个输出神经元对应的内容

以下是我的模型摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten_7 (Flatten)          (None, 784)               0         
_________________________________________________________________
dense_49 (Dense)             (None, 100)               78500     
_________________________________________________________________
batch_normalization_10 (Batc (None, 100)               400       
_________________________________________________________________
dropout_5 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_50 (Dense)             (None, 100)               10100     
_________________________________________________________________
batch_normalization_11 (Batc (None, 100)               400       
_________________________________________________________________
dropout_6 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_51 (Dense)             (None, 100)               10100     
_________________________________________________________________
batch_normalization_12 (Batc (None, 100)               400       
_________________________________________________________________
dropout_7 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_52 (Dense)             (None, 100)               10100     
_________________________________________________________________
batch_normalization_13 (Batc (None, 100)               400       
_________________________________________________________________
dropout_8 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_53 (Dense)             (None, 100)               10100     
_________________________________________________________________
batch_normalization_14 (Batc (None, 100)               400       
_________________________________________________________________
dropout_9 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_55 (Dense)             (None, 5)                 505       
=================================================================
Total params: 121,405
Trainable params: 505
Non-trainable params: 120,900
_________________________________________________________________

您需要将5-9映射到0-4。类标签可能是通过一个热编码完成的,您有5个唯一的标签,因此它只需要一个长度为5的向量来表示它。但是由于标签是5-9,它将超出范围。您不需要调整模型,只需将一个映射添加到标签输出。

由于您使用
numpy
,您可以尝试f滚滚

将tensorflow导入为tf
将numpy作为np导入
arr=np.数组([5,6,7,8,9,8,7,6,5])
arr=tf.one_hot(arr,10,axis=0).numpy()
arr=arr[5:]
argmax(arr.numpy()#返回数组([0,1,2,3,4,3,2,1,0])
或者使用
tf.map\u fn

arr=np.数组([5,6,7,8,9,8,7,6,5])
tf.map_fn(lambda x:x-5,arr).numpy()#数组([0,1,2,3,4,3,2,1,0])

有道理,但我应该在我的keras代码的哪一点上做这个映射?我假设keras对此有一些东西,但我不知道具体是什么。将映射查找添加到dataloader部分,例如,当您获取数据和标签时,将标签映射到相应的0索引值。然后在查看输出时,使用反向映射将输出映射回to适当的标签。