problem of entry format for a simple model in Keras

I apologize if this question is too elementary for this site. I am new in learning Keras and Tensorflow and I have the following type/shape problem on which I have already wasted too much time.

I entered this code (found on the web) to construct a keras model using sequential()

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

model = Sequential()
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])


I then want to try the function model.evaluate(). But I can't find in the documentation nor in my trials and errors under what format the entry of evaluate should be. Among many other things, I have tried:

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


but I get a long error message ending in

ValueError: Error when checking input: expected dense_1_input to have shape (100,) but got array with shape (1,)

Anyone has an idea what is happening here? Just a simple line of code creating a dummy entry that my model could evaluate() would unstuck me, I think.

• Try model.evaluate(np.random.random((100, 3))) – Media Mar 30 '19 at 19:41

model.evaluate requires both input and output, for example

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


I think a step-by-step example would be more beneficial. Here is a working example:

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.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)


which outputs binary_crossentropy loss:

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


If you skip the training, i.e. commenting out

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


the output will be

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