繁体   English   中英

tensorflow keras:我收到此错误“模块“tensorflow._api.v1.keras.layers”没有属性“flatten”

[英]tensorflow keras: I am getting this error 'module "tensorflow._api.v1.keras.layers' has no attribute 'flatten'"

执行以下代码时出现上述错误。 我正在尝试在下面的 tensorflow 神经网络实现教程中解决这个问题。 https://www.datacamp.com/community/tutorials/tensorflow-tutorial

def load_data(data_directory):
directories = [d for d in os.listdir(data_directory) 
               if os.path.isdir(os.path.join(data_directory, d))]
labels = []
images = []
for d in directories:
    label_directory = os.path.join(data_directory, d)
    file_names = [os.path.join(label_directory, f) 
                  for f in os.listdir(label_directory) 
                  if f.endswith(".ppm")]
    for f in file_names:
        images.append(skimage.data.imread(f))
        labels.append(int(d))
return images, labels

import os
import skimage
from skimage import transform
from skimage.color import rgb2gray
import numpy as np
import keras
from keras import layers
from keras.layers import Dense
ROOT_PATH = "C://Users//Jay//AppData//Local//Programs//Python//Python37//Scriptcodes//BelgianSignals"
train_data_directory = os.path.join(ROOT_PATH, "Training")
test_data_directory = os.path.join(ROOT_PATH, "Testing")

images, labels = load_data(train_data_directory)


# Print the `labels` dimensions
print(np.array(labels))

# Print the number of `labels`'s elements
print(np.array(labels).size)

# Count the number of labels
print(len(set(np.array(labels))))

# Print the `images` dimensions
print(np.array(images))

# Print the number of `images`'s elements
print(np.array(images).size)

# Print the first instance of `images`
np.array(images)[0]

images28 = [transform.resize(image, (28, 28)) for image in images]

images28 = np.array(images28)

images28 = rgb2gray(images28)

# Import `tensorflow` 
import tensorflow as tf 

# Initialize placeholders 
x = tf.placeholder(dtype = tf.float32, shape = [None, 28, 28])
y = tf.placeholder(dtype = tf.int32, shape = [None])

# Flatten the input data
images_flat = tf.keras.layers.flatten(x)

# Fully connected layer 
logits = tf.contrib.layers.dense(images_flat, 62, tf.nn.relu)

# Define a loss function
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels = y, 
                                                                    logits = logits))
# Define an optimizer 
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

# Convert logits to label indexes
correct_pred = tf.argmax(logits, 1)

# Define an accuracy metric
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

起初,我在教程中使用了 tf.layers.flatten(x) 。 但是,它将在未来版本中折旧。 因此,请按照建议添加 keras。

我在空闲控制台中得到以下输出。

重新启动:C:\\Users\\Jay\\AppData\\Local\\Programs\\Python\\Python37\\Scriptcodes\\SecondTensorFlow.py 使用 TensorFlow 后端。

警告(来自警告模块):文件“C:\\Users\\Jay\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\skimage\\transform_warps.py”,第 105 行警告(“默认模式,'constant ', 将在 " 中更改为 'reflect' UserWarning: 默认模式 'constant' 将在 skimage 0.15 中更改为 'reflect'。

警告(来自警告模块):文件“C:\\Users\\Jay\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\skimage\\transform_warps.py”,第 110 行警告(“将启用抗锯齿默认情况下,skimage 0.15 到“ UserWarning: Anti-aliasing 将在 skimage 0.15 中默认启用,以避免在对图像进行下采样时出现锯齿现象。

回溯(最近一次调用):文件“C:\\Users\\Jay\\AppData\\Local\\Programs\\Python\\Python37\\Scriptcodes\\SecondTensorFlow.py”,第 64 行,在

images_flat = tf.python.keras.layers.flatten(x)

AttributeError: 模块“tensorflow”没有属性“python”

我正在使用,Keras 版本 2.2.4 Tensorflow 版本 1.13.1

任何一个

from keras.layers import Flatten

并使用

Flatten()(input)

或者

简单地使用

tf.keras.layers.Flatten()(input)

新的(“keras 作为默认 API”)方法会让你使用 keras 层tf.keras.layers.Flatten但你似乎错过了一些细微差别(评论中没有提到)。

tf.keras.layers.Flatten()实际上返回一个 keras 层(可调用)对象,该对象又需要与您的前一层一起调用。

所以更像这样:

# Flatten the input data
flatten_layer = tf.keras.layers.Flatten()
images_flat = flatten_layer(x)

或者,为简洁起见,只是:

# Flatten the input data
images_flat = tf.keras.layers.Flatten()(x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM