Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';尺寸';对象没有属性';log10';使用Keras Sequential Model.fit时_Python_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 属性错误:';尺寸';对象没有属性';log10';使用Keras Sequential Model.fit时

Python 属性错误:';尺寸';对象没有属性';log10';使用Keras Sequential Model.fit时,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我在MNIST数据上使用一个简单的CNN Keras序列模型。我可以构建模型,但当我运行Model.fit时,遇到错误,AttributeError:“Dimension”对象没有属性“log10”。下面提到的是我的代码。谷歌搜索了一下,但找不到解决方案 下面提到的是完整的代码。TF版本是1.15 # To support both python 2 and python 3 from __future__ import division, print_function, unicode_lit

我在MNIST数据上使用一个简单的CNN Keras序列模型。我可以构建模型,但当我运行
Model.fit
时,遇到错误,
AttributeError:“Dimension”对象没有属性“log10”
。下面提到的是我的代码。谷歌搜索了一下,但找不到解决方案

下面提到的是完整的代码。TF版本是1.15

# To support both python 2 and python 3
from __future__ import division, print_function, unicode_literals
from io import open

# Common imports
import numpy as np
import os
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, Dense, Dropout, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam


height = 28
width = 28
channels = 1
n_inputs = height * width

conv1_fmaps = 32
conv1_ksize = 3
conv1_stride = 1
conv1_pad = "SAME"

conv2_fmaps = 64
conv2_ksize = 3
conv2_stride = 2
conv2_pad = "SAME"

pool3_fmaps = conv2_fmaps

n_fc1 = 64
n_outputs = 10

with tf.name_scope("inputs"):
    X = tf.placeholder(tf.float32, shape=[None, n_inputs], name="X")
    X_reshaped = tf.reshape(X, shape=[-1, height, width, channels])
    y = tf.placeholder(tf.int32, shape=[None], name="y")

cnn_model = Sequential()

cnn_model.add(Conv2D(filters=conv1_fmaps, kernel_size=conv1_ksize,
                         strides=conv1_stride, padding=conv1_pad,
                         activation=tf.nn.relu, input_shape=(height, width, channels),
                    data_format='channels_last'))

cnn_model.add(MaxPool2D(pool_size = (2,2), strides= (2,2), padding="VALID"))

cnn_model.add(Dropout(0.25))

cnn_model.add(Flatten())

cnn_model.add(Dense(units = 32, activation = 'relu'))

cnn_model.add(Dense(units = 10, activation = 'sigmoid'))

cnn_model.summary()

(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()
X_train = X_train.astype(np.float32).reshape(-1, 28*28) / 255.0
X_train_reshaped = tf.reshape(X_train, shape=[-1, height, width, channels])
X_test = X_test.astype(np.float32).reshape(-1, 28*28) / 255.0
X_test_reshaped = tf.reshape(X_test, shape=[-1, height, width, channels])

#y_train = y_train.astype(np.int32)
y_train = tf.cast(y_train, dtype = tf.int32)

#y_test = y_test.astype(np.int32)
y_test = tf.cast(y_test, dtype = tf.int32)

cnn_model.compile(loss ='sparse_categorical_crossentropy', optimizer=Adam(lr=0.001),metrics =['accuracy'])

steps_per_epoch = X_train_reshaped.shape[0]//512
steps_per_epoch

epochs = 50

history = cnn_model.fit(x = X_train_reshaped,
                        y = y_train,
                        batch_size = 512,
                        epochs = 5,
                        verbose = 1, validation_data = (X_test_reshaped, y_test),
                        validation_steps = 10, steps_per_epoch=steps_per_epoch)
错误的堆栈跟踪如下所示:

Train on 117 samples, validate on 10000 samples
Epoch 1/5

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-89dd7568f671> in <module>
      6                         epochs = 5,
      7                         verbose = 1, validation_data = (X_test_reshaped, y_test),
----> 8                         validation_steps = 10, steps_per_epoch=steps_per_epoch)

~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    725         max_queue_size=max_queue_size,
    726         workers=workers,
--> 727         use_multiprocessing=use_multiprocessing)
    728 
    729   def evaluate(self,

~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_arrays.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    673         validation_steps=validation_steps,
    674         validation_freq=validation_freq,
--> 675         steps_name='steps_per_epoch')
    676 
    677   def evaluate(self,

~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_arrays.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)
    347         batch_logs = cbks.make_logs(model, batch_logs, batch_outs, mode)
    348         callbacks._call_batch_hook(mode, 'end', step, batch_logs)
--> 349         progbar.on_batch_end(step, batch_logs)
    350         step += 1
    351 

~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/callbacks.py in on_batch_end(self, batch, logs)
    759     # will be handled by on_epoch_end.
    760     if self.verbose and (self.target is None or self.seen < self.target):
--> 761       self.progbar.update(self.seen, self.log_values)
    762 
    763   def on_epoch_end(self, epoch, logs=None):

~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/utils/generic_utils.py in update(self, current, values)
    393 
    394       if self.target is not None:
--> 395         numdigits = int(np.log10(self.target)) + 1
    396         bar = ('%' + str(numdigits) + 'd/%d [') % (current, self.target)
    397         prog = float(current) / self.target

AttributeError: 'Dimension' object has no attribute 'log10'
对117个样本进行训练,对10000个样本进行验证
纪元1/5
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
6个时代=5,
7详细=1,验证数据=(X检验,y检验),
---->8个验证步骤=10个,每个历元的步骤=每个历元的步骤)
~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.PY in-fit(self、x、y、批处理大小、历元、冗余、回调、验证拆分、验证数据、随机、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、验证频率、最大队列大小、工人、使用多处理、**kwargs)
725最大队列大小=最大队列大小,
726名工人=工人,
-->727使用多处理=使用多处理)
728
729 def评估(自我,
~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_arrays.PY适合(self、model、x、y、batch_size、epochs、verbose、callbacks、validation_split、validation_data、shflight、sample_weight、initial_epoch、steps_per_epoch、validation_freq、**kwargs)
673验证步骤=验证步骤,
674验证频率=验证频率,
-->675个步骤(每个时代的步骤)
676
677 def评估(自我,
在模型迭代中~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_arrays.PY(模型、输入、目标、样本权重、批量大小、年代、详细程度、回调、val_输入、val_目标、val_样本权重、无序、初始历元、每历元步长、验证步骤、验证频率、模式、验证拟合、从数据集准备的反馈值、步骤名称、**kwargs)
347批处理日志=CBK。生成日志(模型、批处理日志、批处理输出、模式)
348次回调。调用批处理钩子(模式“结束”、步骤、批处理日志)
-->349批处理结束时的程序条(步骤,批处理日志)
350步+=1
351
~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/callbacks.PY在批处理端(self、批处理、日志)
759#将由现场处理。
760如果self.verbose和(self.target为None或self.seen761 self.progbar.update(self.seen、self.log_值)
762
763 def在_epoch_end上(self、epoch、logs=None):
更新中的~/anaconda3/envs/TF_PY_36/lib/python3.6/site-packages/tensorflow_core/python/keras/utils/generic_utils.PY(自身、当前、值)
393
394如果self.target不是None:
-->395 numdigits=int(np.log10(self.target))+1
396bar=('%'+str(numdigits)+'d/%d[')%(当前,self.target)
397 prog=浮动(当前)/自我目标
AttributeError:“维度”对象没有属性“log10”

提前感谢您的帮助。

错误即将出现,因为您的
步骤每\u历元
具有数据类型
维度
,而不是整数

steps_per_epoch = X_train_reshaped.shape[0]//512
type(steps_per_epoch)
# output: tensorflow.python.framework.tensor_shape.Dimension
要将形状更改为整数,请尝试以下操作:

steps_per_epoch = X_train_reshaped.shape[0].value//512

请添加完整的traceback@MatiasValdenegro,感谢您的回复。添加了堆栈跟踪。我无法重现您的错误消息,对我来说,您的tensorflow代码似乎已修改,但它本身已被破坏