python - 使用 keras,我怎样才能拥有一系列不同的模型?
问题描述
我想在一个数组中有许多不同的模型,但出现错误:
AttributeError: 'Tensor' object has no attribute 'assign'
我的代码是:
class INAS:
def __init__(self, num_models=2, num_classes=10, input_shape=None):
self.models = []
self._num_classes = num_classes
# self.modd = self._build_model(
# num_classes=num_classes, input_shape=input_shape, kernel_size=6)
for i in range(num_models):
mod = self._build_model(
num_classes=num_classes, input_shape=input_shape, kernel_size=i * 3)
self.models.append(mod)
return
def _build_model(self, num_classes, input_shape, kernel_size):
model = Sequential()
model.add(Conv2D(32, kernel_size=(kernel_size, kernel_size), strides=(1, 1),
activation='relu',
input_shape=input_shape))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=Adam(
lr=0.001), metrics=['accuracy'])
return model
def train(self, x_train, y_train):
for model in self.models:
model.fit(x_train, y_train, epochs=50, verbose=1)
我打电话给它:
inas = INAS(input_shape=input_shape, num_classes=num_classes)
for model in inas.models:
print(model.summary())
inas.train(x_train, y_train)
我究竟做错了什么?
痕迹:
File "train.py", line 24, in <module>
inas.train(x_train, y_train)
File "/Users/shamoon/Sites/rowan/eonas/inas.py", line 36, in train
model.fit(x_train, y_train, epochs=50, verbose=1)
File "/Users/shamoon/.local/share/virtualenvs/eonas-oAqeE_OT/lib/python3.7/site-packages/keras/engine/training.py", line 1010, in fit
self._make_train_function()
File "/Users/shamoon/.local/share/virtualenvs/eonas-oAqeE_OT/lib/python3.7/site-packages/keras/engine/training.py", line 509, in _make_train_function
loss=self.total_loss)
File "/Users/shamoon/.local/share/virtualenvs/eonas-oAqeE_OT/lib/python3.7/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/Users/shamoon/.local/share/virtualenvs/eonas-oAqeE_OT/lib/python3.7/site-packages/keras/optimizers.py", line 505, in get_updates
self.updates.append(K.update(m, m_t))
File "/Users/shamoon/.local/share/virtualenvs/eonas-oAqeE_OT/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 973, in update
return tf.assign(x, new_x)
File "/Users/shamoon/.local/share/virtualenvs/eonas-oAqeE_OT/lib/python3.7/site-packages/tensorflow/python/ops/state_ops.py", line 224, in assign
return ref.assign(value, name=name)
AttributeError: 'Tensor' object has no attribute 'assign'
解决方案
问题是您的第一个模型中的kernel_size
值为零。first 的内核Conv2D
是空的。
print(inas.models[0].layers[0].get_weights()[0].shape)
print(inas.models[1].layers[0].get_weights()[0].shape)
# print
(0, 0, 3, 32)
(3, 3, 3, 32)
如果您训练第二个模型,它将起作用。
推荐阅读
- angularjs - 空白页和 TypeError Angular Firebase
- azure-cosmosdb - EF Core 3.1 + Cosmos DB 和 Interceptor 可以一起工作吗?
- android - 如何在通过中介与各种广告网络一起使用 admob 时请求对个性化广告的同意?
- node.js - Laravel 7.9.2 “npm install” 安装了这么多文件
- javascript - 在 React 中使用 axios 在浏览器中显示来自 api 的对象数组
- reactjs - 如何通过graphql查询将br传递给内容属性或p标签内
- r - R访问矩阵到数组3d
- php - 无法存根或模拟类或接口“PhpOffice\PhpSpreadsheet\Worksheet\Worksheet”
- python - Python 脚本未从 crontab 执行
- python - 在 Python 中设置系统时钟?