Skip to content

Instantly share code, notes, and snippets.

@jimfleming
Last active May 26, 2016 18:40
Show Gist options
  • Save jimfleming/1c15dcda3e0d05b3947ac28fc757714a to your computer and use it in GitHub Desktop.
Save jimfleming/1c15dcda3e0d05b3947ac28fc757714a to your computer and use it in GitHub Desktop.
Minimal example of missing placeholder bug.
import numpy as np
from keras.models import Model
from keras.layers import Input, Dense, RepeatVector, Activation, Flatten, Reshape
from keras.layers.convolutional import Convolution2D, MaxPooling2D, AveragePooling2D, UpSampling2D
from keras.layers.normalization import BatchNormalization
from keras.layers.recurrent import LSTM
from keras.layers.wrappers import TimeDistributed
def InterModel(input_shape):
input_ = Input(input_shape)
x = Dense(10)(input_)
x = BatchNormalization()(x)
output = Activation('relu')(x)
return Model(input_, output)
def StepModel(input_shape):
input_ = Input(input_shape)
x = Dense(10)(input_)
# vvvvvvvvvvvvvvvvvvvvvvvv
x = BatchNormalization()(x) # TODO: Commenting out this line will make it work
# ^^^^^^^^^^^^^^^^^^^^^^^^
output = Activation('relu')(x)
return Model(input_, output)
# `InterModel` and `StepModel` are identical but used as different layers of `RecurrentModel`.
def RecurrentModel(input_shape):
input_ = Input(input_shape)
x = InterModel(input_shape)(input_)
x = RepeatVector(5)(x)
x = LSTM(10, return_sequences=True)(x)
output = TimeDistributed(StepModel(input_shape=(10,)))(x)
return Model(input_, output)
model = RecurrentModel(input_shape=(10,))
model.compile(optimizer='rmsprop', loss='mse')
X_train, y_train = np.zeros(shape=(1000, 10)), np.zeros(shape=(1000, 5, 10))
model.fit(X_train, y_train, batch_size=20, nb_epoch=5)
@jimfleming
Copy link
Author

jimfleming commented May 26, 2016

Relevant error when line 23 is uncommented:

Using TensorFlow backend.
Epoch 1/5
Traceback (most recent call last):
  File "test.py", line 37, in <module>
    model.fit(X_train, y_train, batch_size=20, nb_epoch=5)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/keras/engine/training.py", line 1053, in fit
    callback_metrics=callback_metrics)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/keras/engine/training.py", line 791, in _fit_loop
    outs = f(ins_batch)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 659, in __call__
    updated = session.run(self.outputs + self.updates, feed_dict=feed_dict)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 340, in run
    run_metadata_ptr)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 564, in _run
    feed_dict_string, options, run_metadata)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 637, in _do_run
    target_list, options, run_metadata)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 659, in _do_call
    e.code)
tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'input_3' with dtype float
     [[Node: input_3 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Caused by op u'input_3', defined at:
  File "test.py", line 32, in <module>
    model = RecurrentModel(input_shape=(10,))
  File "test.py", line 29, in RecurrentModel
    output = TimeDistributed(StepModel(input_shape=(10,)))(x)
  File "test.py", line 18, in StepModel
    input_ = Input(shape=input_shape)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/keras/engine/topology.py", line 1024, in Input
    name=name, input_dtype=dtype)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/keras/engine/topology.py", line 950, in __init__
    name=self.name)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 111, in placeholder
    x = tf.placeholder(dtype, shape=shape, name=name)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 762, in placeholder
    name=name)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 976, in _placeholder
    name=name)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op
    op_def=op_def)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2154, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/Users/jim/Documents/pgm/.env/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1154, in __init__
    self._traceback = _extract_stack()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment