tensorflow2.0-ValueError:A target array with shape was passed for an output of shape...问题解决
已于 2023-03-02 19:37:20 修改
2020-02-02 14:21:14
在Jupyter notebook训练一个多分类模型时遇到报错
问题:
喂入的是fashion_mnist数据集,训练和测试的图片都经过了归一化,标签也都转为独热编码
模型建立的代码如下:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28, 28)))
model.add(tf.keras.layers.Dense(128, activation = 'relu'))
model.add(tf.keras.layers.Dense(10, activation = 'softmax'))
之前运行的时候是没有报错的,
后来我打算添加层,试一下网络拟合能力有没有提升,
于是在上面的代码下面简单粗暴地加了一行:
model.add(tf.keras.layers.Dense(128, activation = 'relu'))
之后进行模型装配,指定损失函数为分类交叉熵
model.compile(optimizer = tf.keras.optimizers.Adam(learning_rate = 0.01),
loss = 'categorical_crossentropy',
metrics = ['acc'])
传入数据进行训练的时候就遇到报错:
model.fit(train_image, train_label_onehot, epochs = 5)
报错如下:
...
ValueError: A target array with shape (60000, 10) was passed for an output of shape (None, 128)
while using as loss `categorical_crossentropy`.
This loss expects targets to have the same shape as the output.
原因:
添加网络层的时候没有修改输出神经元的个数。
将标签转为独热编码之后label.shape由(60000, )变为(60000, 10)
因此对应的输出的应该是10个神经元
解决:
128 改为10
model.add(tf.keras.layers.Dense(10, activation = 'relu'))
总结:
其实不应该这么直接修改网络层,
softmax层应置于最后一层。
在修改网络结构的时候要注意输出神经元的修改,
从第二层开始,
输入神经元由机器自动判断不用自己定义,
但输出神经元还是要自己判断。
keras保存模型时,使用的是m.save_weights,只保存了模型的权重而没有结构,直接使用keras.models.load_model就会报错。所以,可以重新构建相同结构的模型,(m.save_weights)使用m.load_weights;或者如上m.save,keras.models.load_model。
参考:https://blog.csdn.net/nima1994/article/details/91045745
但是我的问题是:我导入的模型是别人的,如何直接导入只有权重没有结构的模型呢?
1、keras.models.load_model() 读取网络、权重
通常不会报出这种错误,但还是有奇人能搞出来。这种错误通过断点调试就可以发现错误
在利用Python进行绘图时可能报出这种错误。
Traceback (most recent call last):
File "E:\Anaconda3\envs\python27\Lib\lib-tk\Tkinter.py", line 1542, in __call__
return self.func(*args)
File "E:\Anaconda3\envs\python27\lib\site-packages\matplotlib\backends\_backend_tk.py", l
const CometMlAPI = require('comet-ml-api');
const apiKey = 's9ILl8ox92nZSTVh8eo4B47LC';
const cometMl = new CometMlAPI(apiKey, 'v1');
cometMl.projects().then((response) => {
console.log(response);
}).catch(e => {
console.log(e);
cometMl.projects().then((response) => {})
cometMl.experiments(pro
CookieCutter值错误
将存储库克隆到当前目录后,运行
cookiecutter cookiecutter-value-error --config-file=cookiecutter-value-error/init.yaml --no-input
File ".../python3.8/site-packages/poyo/_nodes.py", line 47, in __init__
raise ValueError("Parent of ChildMixin instance needs to be a Container.")
ValueError: Parent of ChildMixin instance needs to be a Container.
2、脚本重启
3、加载模型:model.load_weights(‘./model.h5’)
4、模型报错:ValueError: You are trying to load a weight file containing 12 layers into a model with 0 layers.
问题分析:
模型创建后还没有编译,一般是在模型加载前调用model.build(input_shape), 但我通过Dataset将输入已经变为dict格式了,暂时没找这样输入怎么匹配input_shap
API的用户体验设计原文:User experience design for APIs
作者:Francois Chollet译者:夜风轻扬译者注:什么样的API才是好的API?如何开发出用户乐于使用的API?请阅读下文。编写代码不仅仅是人与电脑间的事。代码也不只和电脑有关;还会影响到用户。程序员编写的代码会被其他程序员阅读、使用和维护。程序员只有使用顺手的工具,心情舒畅的时候才会写出更好更多的
过拟合问题实战
1.构建数据集
我们使用的数据集样本特性向量长度为 2,标签为 0 或 1,分别代表了 2 种类别。借助于 scikit-learn 库中提供的 make_moons 工具我们可以生成任意多数据的训练集。
import matplotlib.pyplot as plt
# 导入数据集生成工具
import numpy as np
import seaborn as sns
from sklearn
ValueError: Error when checking target: expected activation_7 to have shape (2,) but got array with shape (1,)
原贴:https://stackoverflow.com/questions/49392972/error-when-checking-target-expected-dens...
对keras模型进行编译,当loss是categorical_crossentropy的时候,
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
需要将l...
categorical_crossentropy
本文讲解的是categorical_crossentropy损失函数,categorical_crossentropy和binary_crossentropy比较容易混淆,想了解binary_crossentropy可以点击查看。本文将通过数学公式+代码的形式讲解。
这是我使用resnet50.h5进行训练新的模型时出现的问题,而出现此问题的原因是模型的resnet的类别是1000类。而此时的类别是7类,类别不匹配造成的,所以解决方法是:在加载模型权重是设置by_name=True,意思是允许进行fine-tuning微调
model.load_weights(weight_path,by_name=True)