Google Colab(python 2.7)或我的本地系统(python 3.6)上的Tensorflow 1.10 使用https://www.tensorflow.org/guide/keras中的示例代码 代码是
import tensorflow as tf
from tensorflow import keras
import numpy as np
import os
data =np.random.random((1000,32))
labels =np.random.random((1000,10))
dataset1 = tf.data.Dataset.from_tensor_slices((data, labels))
dataset1 = dataset1.batch(32)
dataset1 = dataset1.repeat()
model = keras.Sequential()
model.add(keras.layers.Dense(64,activation='relu'))
model.add(keras.layers.Dense(64,activation='relu'))
model.add(keras.layers.Dense(10,activation='softmax'))
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(dataset1 ,epochs=10,steps_per_epoch=30)
引发以下错误:
Error TypeError: Input 'y' of 'Mul' Op has type float32 that does not match type float64 of argument 'x'.
packages/tensorflow/python/framework/op_def_library.pyc in _apply_op_helper(self, op_type_name, name, **keywords)
544 "%s type %s of argument '%s'." %
545 (prefix, dtypes.as_dtype(attrs[input_arg.type_attr]).name,
--> 546 inferred_from[input_arg.type_attr]))
547
548 types = [values.dtype]
TypeError: Input 'y' of 'Mul' Op has type float32 that does not match type float64 of argument 'x'.
答案 0 :(得分:0)
我遇到了同样的问题,我假设model
中使用的默认数据类型是float32
,而numpy
中使用的默认数据类型是float64
和{{1} }保留该类型。要解决此问题,只需更改代码:
from_tensor_slices
到
data = np.random.random((1000,32))
labels = np.random.random((1000,10))
但我确实认为tensorflow作为其教程中的一部分示例代码,应确保其运行。
编辑:刚刚发现这实际上是github上的一个未解决的问题:https://github.com/tensorflow/tensorflow/issues/22207
答案 1 :(得分:0)
我遇到了类似的问题。我使用此代码段。
model.compile(optimizer=opt,
loss=keras.losses.categorical_crossentropy)
我猜Keras中的损失函数只需要'float'类型(我没有检查源代码)。为解决此问题,我在输出层的末尾添加了一层。
decoder_outputs = Lambda(lambda x: K.cast(x, 'float32'), name='change_to_float')(decoder_outputs)
希望这会有所帮助。