Keras中简单模型的输入格式问题

数据挖掘 机器学习 Python 喀拉斯 张量流
2022-02-16 04:19:21

如果这个问题对于这个网站来说太简单了,我很抱歉。我是学习 Keras 和 Tensorflow 的新手,我有以下类型/形状问题,我已经浪费了太多时间。

我输入了这段代码(在网上找到)来使用 sequence() 构建一个 keras 模型

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

然后我想尝试函数 model.evaluate()。但我无法在文档中找到,也无法在我的试验和错误中找到评估的条目应该是什么格式。在许多其他事情中,我尝试过:

import numpy as np
model.evaluate(np.random.random((100,)))

但我收到一条很长的错误消息,以

ValueError:检查输入时出错:预期dense_1_input的形状为(100,)但得到的数组形状为(1,)

任何人都知道这里发生了什么?我认为,只需一行简单的代码创建一个我的模型可以评估的虚拟条目()就会让我失望。

1个回答

model.evaluate需要输入和输出,例如

evaluation = model.evaluate(np.random.random((1, 100)), np.random.random((1, 1)))

我认为一步一步的例子会更有益。这是一个工作示例:

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

N = 1000
dimension = 100

# create some random input features (x) and output (y)
np.random.seed(0)
x = np.random.random((N, dimension))
y = np.random.random((N,))

# split the data into train and test sets
split = int(0.8 * N)
x_train = x[:split]
y_train = y[:split]
x_test = x[split:]
y_test = y[split:]

# build the model architecture
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=dimension))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# train the model
model.fit(x_train, y_train, epochs=100)

# evaluate the model on train and test sets
train_loss = model.evaluate(x_train, y_train)[0]
test_loss = model.evaluate(x_test, y_test)[0]

print('train loss:', train_loss, ', test loss:', test_loss)

# predict (y) for a random input (x)
y_predict = model.predict(np.random.random((1, dimension)))
print('prediction:', y_predict)

输出binary_crossentropy损失:

train loss: 0.5500347983837127 , test loss: 0.7403841614723206
prediction: [[0.38731796]]

如果您跳过培训,即注释掉

# train the model
model.fit(x_train, y_train, epochs=100)

输出将是

train loss: 0.7098221921920777 , test loss: 0.7191445398330688
prediction: [[0.32682237]]