小编ray*_*ang的帖子

在gridview适配器中,getView(position == 0)被调用太多次以在装载器中的setImageBitmap()时测量布局

我有一个GridView显示一些图标.

在我从Android开发者网站上有效地阅读这个显示位图之前,我正在从getView()适配器直接解码本地路径中的位图,如下所示:

public View getView(int position, View convertView, ViewGroup parent) {
      ...
      ImageView icon = ...... (from getTag() of convertView)
      icon.setImageBitmap(BitmapUtil.decode(iconPath));
      ...
}
Run Code Online (Sandbox Code Playgroud)

这种方式无论如何工作正常,我称之为[直接模式],getView()方法的输出日志应该是:

getView(0)   // measure kid's layout.
getView(0)
getView(1)
getView(2)
...
getView(n)       // when scrolling gridview.
getView(n+1)
...
getView(n+3)    // scrolling again.
getView(n+4)
...
Run Code Online (Sandbox Code Playgroud)

然后我试图将代码更改为有效显示位图的文章中提到的[Loader Mode] ,如下所示:

public View getView(int position, View convertView, ViewGroup parent) {
      ...
      ImageView icon = ...... (from getTag() of convertView)
      loadIcon(icon, …
Run Code Online (Sandbox Code Playgroud)

android android-gridview android-view

23
推荐指数
1
解决办法
1万
查看次数

是否有一种简单的方法来使用tf.data.Dataset.from_generator中的函数和张量流中的自定义model_fn(Estimator)

我正在使用tensorflow数据集api作为我的训练数据,输入tf.data.Dataset.from_generator api的生成器和生成器

def generator():
    ......
    yield { "x" : features }, label


def input_fn():
    ds = tf.data.Dataset.from_generator(generator, ......)
    ......
    feature, label = ds.make_one_shot_iterator().get_next()
    return feature, label
Run Code Online (Sandbox Code Playgroud)

然后我为我的Estimator创建了一个自定义的model_fn,代码如下:

def model_fn(features, labels, mode, params):
    print(features)
    ......
    layer = network.create_full_connect(input_tensor=features["x"], 
    (or layer = tf.layers.dense(features["x"], 200, ......)
    ......
Run Code Online (Sandbox Code Playgroud)

训练时:

estimator.train(input_fn=input_fn)
Run Code Online (Sandbox Code Playgroud)

但是,代码不起作用,因为函数model_fn的features参数是:

Tensor("IteratorGetNext:0",dtype = float32,device =/device:CPU:0)

代码"features ["x"]"将失败告诉我:

......"site-packages\tensorflow\python\ops\array_ops.py",第504行,在_SliceHelper中end.append(s + 1)TypeError:必须是str,而不是int

如果我将input_fn更改为:

input_fn = tf.estimator.inputs.numpy_input_fn(
  x={"x": np.array([[1,2,3,4,5,6]])},
  y=np.array([1]),
Run Code Online (Sandbox Code Playgroud)

代码继续,因为现在的功能是一个字典.

我搜索了估算器的代码,发现它使用了一些函数,如

features, labels = self._get_features_and_labels_from_input_fn(
      input_fn, model_fn_lib.ModeKeys.TRAIN)
Run Code Online (Sandbox Code Playgroud)

从input_fn检索功能和标签,但我不知道为什么它通过使用不同的数据集实现通过我(model_fn)两种不同的数据类型的功能,如果我想使用我的生成器模式,那么如何使用该类型(IteratorGetNext )功能?

谢谢你的帮助!

[更新]

我对代码做了一些改动,

def generator():
    ......
    yield …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

8
推荐指数
1
解决办法
2676
查看次数